例題 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';
|