C++スコーラ

文字の配列

最終更新:

cschola

- view
管理者のみ編集可

文字の配列

配列を作るれるのは int型だけではありません。
double型 や char型の配列も作ることができます。
double型 の配列は int型とほとんど変わらないので、char型の配列について説明します。
char型 は半角英数の文字を入れることができる変数です。それが配列になると「文字列」を入れることができます。
「文字」と「文字列」では扱いに違いがあります。
char cha;

char str[5];

cha = 'A'; //1文字しか入らない

str[0] = 'A';

str[1] = 'B';

str[2] = 'C';

str[3] = 'D';

str[4] = '\0'; //最後には必ず \0 を入れる

printf("%c\n",cha); //1文字だけなら %c

printf("%s\n",str); //文字列は %s
文字列の最後には必ず \0 を入れなくてはいけません。
これは NULLcharacter、ヌル文字などと呼ばれています。
この \0 に配列の要素を1つ使うため、
4文字入れたい場合は要素数が5以上の配列を、100文字入れたい場合は要素数が101以上の配列を用意しなくてはいけません。

文字列の初期化

文字列もほかの配列と同じように初期化できます。
char str[5] = {'A','B','C','D','\0'};

printf("%s\n",str);
[ ] の中に何も書かず初期化すれば、自動的に必要な要素数を確保してくれます。
char str[] = {'A','B','C','D','\0'};

printf("%s\n",str);
' ' ではなく " " を使うことで、,(カンマ)を入れる必要もなく、\0 も自動的に入れてくれます。
char str[5] = {"ABCD"};

printf("%s\n",str);
さらに [ ] の中を書かないことで要素数を自動で確保してくれます。
char str[] = {"ABCD"};

printf("%s\n",str);

文字列入力

ユーザーからの文字列入力を受け付けるには scanf_s をつかいます。
char str[255];

printf("英数で254文字以内の文字列を入力してください。\n");

scanf_s("%s",str,255); // & は付けない

printf("%sが入力されました。\n",str);
ユーザーの入力する文字列の長さがわからないため、要素数は多めに宣言します。
文字列の入力を求めるとき、scan_f("%s", str, 255) のように文字数の制限が必要です。例の場合 255-1 文字まで打てます。超えてしまうと何も表示されません。

文字列の操作

文字列の最後には \0 を入れる決まりになっています。
つまり、最後には必ず \0 が入っているのです。
それを利用すると次のようなことができます。
char str[255];

printf("文字列を入力してください。\n");

scanf_s("%s",str,255);

int i = 0;

while(str[i] != '\0'){
	printf("%c",str[i]);

	i++;
}
これは文字列の中の文字を一つ一つ表示しています。
scanf_s で文字列を受け付けるときは %s を使いますが、& は付けないので注意してください。

二次元配列

二次元配列を使うことで複数の文字列をループの中で扱えます。
char str[3][255];

printf("文字列を3つ入力してください。\n");

for(int i = 0; i < 3; i++){
	scanf_s("%s",str[i],255);
}

printf("入力された文字列は\n");

for(int i = 0; i < 3; i++){
	printf("%d番目が%s\n",i,str[i]);
}

printf("です。\n");

練習問題

次のようなプログラムを作ってください。
第1問
ユーザーから実数値を5個入力してもらい、降順で並べて、小数点以下第2位まで表示。
第2問
ユーザーに整数値を10個入力してもらい、平均より大きいものだけ選んで表示。
第3問
ユーザーに文字列を入力してもらい、文字列の中に A の文字があったら B に変えて表示。
目安箱バナー