スペースをタブに変換する
/*--------------------------------------------------------------- スペースをタブに変換する ----------------------------------------------------------------*/ #include <stdio.h> #define NASHI 0 /* tab_flag 未出力' 'なし*/ #define ARI 1 /* tab_flag 未出力' 'あり*/ void main() { char a[80]; /*変換する文字列*/ char b[80]; /*結果を格納する配列*/ int i=-1, j=0; /*配列の添え字*/ int st; /*' 'スタート位置*/ int tab_width; /*タブ幅*/ int next_tab; /*次のタブ位置*/ int tab_flag; /*未出力' 'の有無*/ /*変換する文字列の入力*/ printf("input stings : "); gets(a); /*タブ幅の入力*/ printf("tab width : "); scanf("%d", &tab_width); /*変換処理*/ tab_flag = NASHI; do { i++; /*タブ位置まで' 'がたまっている時*/ if (tab_flag == ARI && i == next_tab) { b[j++] = '\t'; tab_flag = NASHI; } /*' 'がたまっていない時*/ if (tab_flag == NASHI) { if (a[i] != ' ') b[j++] = a[i]; else { /*' 'をためはじめる*/ tab_flag = ARI; st = i; next_tab = (i / tab_width + 1) * tab_width; } } /*' 'がたまっている時*/ else { if (a[i] != ' ') { /*すべてコピー*/ for (; st <= i; st++) b[j++] = a[st]; tab_flag = NASHI; } } } while (a[i] != '\0'); /*結果の表示*/ printf("a[] = %s\n", a); printf("a[] = "); for (i=0; a[i] != '\0'; i++) printf("%2.2X ", a[i]); printf("%2.2X\n", a[i]); printf("b[] = %s\n", b); printf("b[] = "); for (j = 0; b[j] != '\0'; j++) printf("%2.2X ", b[j]); printf("%2.2X\n", b[j]); }
実行結果
D:\cp>oyo1-6-1 input stings : abc 123 tab width : 4 a[] = abc 123 a[] = 20 20 20 20 20 20 61 62 63 20 20 20 20 20 20 20 31 32 33 00 b[] = abc 123 b[] = 09 20 20 61 62 63 09 09 31 32 33 00