【課題4−8】 提出課題(3) 文字列中の'¥t'を指定するタブ幅でスペースにして表示し,表示文字数を返却する関数を,空欄A〜Dを埋めて作成せよ. #include int tab_space(const char *s, int n); int main(void) { char *str[3] = { //ポインタの配列に文字列のアドレスを設定 "happy¥tgood¥tcongratulation", "boy¥tgirl¥twoman¥tman", "flower¥ttree¥tbeautiful" }; int i, tab, len; printf("Input tab length:"); scanf("%d", &tab); for (i = 0; i < 3; i++) { len = tab_space(「  A  」); printf(":%d characters¥n", len); } return 0; } /* タブをスペースに変換表示 */ /* 引数: *s:文字列へのポインタ n:タブ幅 */ /* 返値: 表示文字数 */ int tab_space(const char *s, int n) { int rest, i, len = 0; while (*s != '¥0') { //文字列終了までループ if (*s == '¥t') { //タブなら rest = 「  B  」; //残り文字数の算出 for (i = 0; i < rest; i++, len++) putchar(' '); } else { putchar(「 C 」); //タブ以外ならそのまま文字表示 len++; } 「 D 」; //ポインタを進める } return len; } 【実行結果例】 Input tab length:8 happy good congratulation:30 characters boy girl woman man:27 characters flower tree beautiful:25 characters 【解説とヒント】 文字列に'¥t'が出現した場合,タブ幅に足りない部分はスペースで埋めて,次の文字を表示しなければならない. このスペースの数は,表示済みの文字数をタブ幅で割ったあまりをタブ幅から引いたものになる. mainは,複数の文字列それぞれのアドレスをtab_space関数に渡している.つまり,tab_space関数では,文字列を一つずつ処理している.