第 11 回 文字列

本日の内容


このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。

11-1. 文字列

C 言語で文字列を扱うには、文字型の配列を使います。 ただし、配列の終りには配列の終りを示す特別な文字\0(番兵)を入 れます。従って、文字配列に文字列を入れるには次のようにします。


char x[]={'a','b','c','\0'};

ただし、文字列の扱いを簡単にするために、これを次のように書くことが可能 です。


char x[]="abc";

このように書くと配列変数 x の値は次のようになります。


x[0]='a', x[1]='b', x[2]='c', x[3]='\0'

二重引用符で括られた文字列を並べると一つの文字列として扱われます。 つまり、長い文字列を記述する場合、つぎのようにします。


char x[]="abc"
         "def"
         "ghi";

この宣言は char x[]="abcdefghi"; と同じになります。 なお、このような文字列の一括の代入はあくまでも宣言文の中でのみ有効で、 プログラムの実行中はできません。 プログラム中はひと文字ずつしか取り扱えません。 文字配列 x, y に対し、 x=y と書いても x に y の値をコピーすることには なりません。

文字を画面に表示するには printf("%c",x[0]); などと書きますが、文字配列 を一括して画面に表示するには %s を使用します。 printf("%s",x); と %s に対して文字配列名を指定します。 これは、次のプログラムと同じ処理が行なわれます。


int i=0;
while(x[i]!='\0'){
  printf("%c",x[i++]);
}

11-2. 付録

練習問題

演習11-1

文字列が与えられた時、縦書きに表示するプログラムを書きなさい。 そして "abcdefg" を縦書きにしなさい。


演習11-2

? マークの部分を書き換えて、次のプログラムを完成させなさい。 また、文字列を "ABCDEF" に替えて実行しなさい。

#include <stdio.h>
main(){
  char x[]="abcdefgh";
  int y=0;
  while(x[y]!='\0'){
    printf("文字列 %s の %d 文字目は %c\n",?,?,?);
    y=y+1;
  }
  printf("全部で %d 文字\n",?);
}

演習11-3

文字列の長さを出力するプログラムを書きなさい。 文字列 "abcdefg" などで試しなさい。


演習11-4

次のプログラムを完成させなさい。 また、文字列を "ABC" と "DEF" に替えて実行しなさい。

#include <stdio.h>
main(){
  char x[]="abcdef", y[]="ghijkl", z[100];
  int i,j;
  printf("文字列 %s と文字列 %s をくっつけると",x,y);
  /* まず z に x をひと文字ずつコピーする */
  j=0;
  while(y[j]!='\0'){
    z[i]=y[j];
    i=i+1;
    j=j+1;
  }
  z[i]='\0';
  printf("%s\n",z);
}

演習11-5

文字列が与えられた時、先頭の 3 文字だけを表示するプログラムを書きなさ い。 作ったプログラムを文字列 "abcde", "ABC", "X" などで試しなさい。

ヒント

「文字が \0 かまたは 3 文字を越えた時」終了させるには次のように論理演算を 使います。

  while((文字が '\0' でない)&&(3 文字以内))

演習11-6

文字列が与えられた時、先頭の空白の文字数を数えるプログラムを書きなさい。 "a○b○c" なら 0, "○○def" なら 2 が出力されるようにしなさい(○は空白 を表す)。


演習11-7

文字配列 x 中に含まれている文字変数 y の文字の使用頻度を求めるプログラ ムを書きなさい。 例えば、 x[]="This is a pen.", y='i' ならば、 2 を表示しなさい。


演習11-8

文字列が与えられた時、二文字出力しては改行するように表示するプログラム を書きなさい。 そして、次の文字列で試しなさい。

  1. "a"
  2. "abcd"
  3. "abcde"

演習11-9

文字列が与えられた時、最初の文字から一文字おきに表示するプログラムを書 きなさい。 "abcde" なら出力は ace になります。 そして、次の文字列で試しなさい。

  1. "a"
  2. "abcd"
  3. "abcde"

演習11-10

文字列が与えられた時、逆向きに表示するプログラムを書きなさい。 "abcdefg" が与えられた時、「gfedcba」と表示されるようにしなさい。


坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科