今回は、文字列の配列について説明します。
文字列自体が配列ですから、文字列の配列とは二次元配列になります。
<イメージ>
文字列 str 0 1 2 3 4 5 6 7 8 9 +−+−+−+−+−+−+−+−+−+−+ |A|B|C|\0| | | | | | | +−+−+−+−+−+−+−+−+−+−+ 文字列配列 str 0 1 2 3 4 5 6 7 8 9 +−+−+−+−+−+−+−+−+−+−+ 0|A|B|C|\0| | | | | | | +−+−+−+−+−+−+−+−+−+−+ 1|D|E|\0| | | | | | | | +−+−+−+−+−+−+−+−+−+−+ 2|F|G|I|J|\0| | | | | | +−+−+−+−+−+−+−+−+−+−+
二次元配列ですので、各文字を扱うには縦横の添え字を指定すれば良いです。
また、文字列として1行分扱うには縦の添え字までを指定して使うことが出来ます。
言葉で書くより、実際のプログラムを動かしながら確認しましょう。
トランプのスート(SUIT:マークのこと)を題材にして作ります。
suit 0 1 2 3 4 5 6 7 8 9 +−+−+−+−+−+−+−+−+−+−+ 0|S|P|A|D|E|\0| | | | | +−+−+−+−+−+−+−+−+−+−+ 1|H|E|A|R|T|\0| | | | | +−+−+−+−+−+−+−+−+−+−+ 2|D|I|A|M|O|N|D|\0| | | +−+−+−+−+−+−+−+−+−+−+ 3|C|L|U|B|\0| | | | | | +−+−+−+−+−+−+−+−+−+−+
#defineを使ってSUITを4に、MAX_STRINGを10に設定してください。
char型で二次元配列suitを作り、初期値として上のスート名を入れます。
文字列配列の初期値は↓のように設定します。
<sample program 096-01>
#include <stdio.h> #define SUIT 4 #define MAX_STRING 10 int main(void) { char suit[SUIT][MAX_STRING] = { "SPADE", "HEART", "DIAMOND", "CLUB", }; return 0; } |
では、縦横の添え字を指定して「文字」を表示してみます。
<sample program 096-02>
#include <stdio.h>
#define SUIT 4
#define MAX_STRING 10
int main(void)
{
char suit[SUIT][MAX_STRING] = {
"SPADE",
"HEART",
"DIAMOND",
"CLUB",
};
printf("%c\n", suit[1][3]);
return 0;
}
|
<実行結果>
R 続行するには何かキーを押してください・・・
"HEART"の'R'が表示されました。
文字列配列は「文字列」の配列ですから、「文字列」として扱うことも出来ます。
上にも書きましたが、縦の添え字までを指定し(横は指定しない)ます。
<sample program 096-03>
#include <stdio.h> #define SUIT 4 #define MAX_STRING 10 int main(void) { char suit[SUIT][MAX_STRING] = { "SPADE", "HEART", "DIAMOND", "CLUB", }; printf("%s\n", suit[2]); return 0; } |
<実行結果>
DIAMOND 続行するには何かキーを押してください・・・
「文字列」として表示しますから「%s」を指定しています。
添え字を上手く使えば色々なことに使えそうです。
例えば↓は繰り返しの中で全ての文字列を表示するプログラムです。
<sample program 096-04>
#include <stdio.h>
#define SUIT 4
#define MAX_STRING 10
int main(void)
{
char suit[SUIT][MAX_STRING] = {
"SPADE",
"HEART",
"DIAMOND",
"CLUB",
};
int i;
for (i = 0; i < SUIT; i++) {
printf("%s\n", suit[i]);
}
return 0;
}
|
<実行結果>
SPADE HEART DIAMOND CLUB 続行するには何かキーを押してください・・・
また、乱数などを使う場合も↓のように使えます。
<sample program 096-05>
#include <stdio.h> #include <stdlib.h> #include <time.h> #define SUIT 4 #define MAX_STRING 10 int main(void) { char suit[SUIT][MAX_STRING] = { "SPADE", "HEART", "DIAMOND", "CLUB", }; int r; srand((unsigned int)time(NULL)); r = rand() % SUIT; printf("%s\n", suit[r]); return 0; } |
<実行結果>
CLUB 続行するには何かキーを押してください・・・
次回も文字列配列を使ったプログラムを作ります。