例題 12 つの文字列(それぞれ改行を含めて 64 文字未満)を読み込み, それらを 1 行に連結した文字列を作りなさい.ただし,連結の結果に改行文字は含めないものとする. コーディング例1 /* 2 * プログラミング演習 第 11 回 3 * [例題 1] 4 * (C) 2006 Hirohisa AMAN <aman@cs.ehime-u.ac.jp, aman@computer.org> 5 */ 6 #include <stdio.h> 7 #include <string.h> 8 9 int main(void){ 10 char str[64]; 11 char text[128]; 12 int i; 13 14 /* 1 つ目の文字列を読み込む */ 15 printf(" 1 > "); 16 fgets(str, 64, stdin); 17 18 /* 後ろから 2 文字目に改行文字があるので '\0' で上書き */ 19 i = strlen(str); 20 str[i-1] = '\0'; 21 22 /* そのまま text へコピーする */ 23 strcpy(text, str); 24 25 /* 2 つ目の文字列を読み込み,1 つ目と同様に改行文字を消す */ 26 printf(" 2 > "); 27 fgets(str, 64, stdin); 28 i = strlen(str); 29 str[i-1] = '\0'; 30 31 /* text の後ろに str を追加する */ 32 strcat(text, str); 33 34 printf("連結文字列: %s\n", text); 35 36 return 0; 37 }
※左端の数字は行番号であり,ソースコードには含まれない点に注意!
コンパイル & 実行例$ gcc example11_1.c [Enter] $ ./a.out [Enter] 1 > aman@computer [Enter] 2 > .org [Enter] 連結文字列: aman@computer.org 解説2 つの 文字列を連結 するには strcat という関数を利用するとよい.基本的な使い方は
例えば, もちろん,str1 には追加分を格納できるだけの空き領域が必要である. ここではまず,23 行目 23 strcpy(text, str);で str 内の文字列を text へコピーし,32 行目 32 strcat(text, str);でその後ろに文字列の追加(連結)を行っている.
その他に注意しておく点として
改行文字を消す
という作業がある.
aman@computer[Enter]と打ち込むと, 文字列としては次のように解釈される: まず,この文字列の長さを調べると 14 ということになる (strlen 関数を使用). そして,その 1 つだけ前の文字(13 番目)に '\n' が入っているので, これを '\0' で上書きする. この操作が 19 〜 20 行目と 28 〜 29 行目で行われている: 19 i = strlen(str); 20 str[i-1] = '\0'; 28 i = strlen(str); 29 str[i-1] = '\0'; |