★データ構造(二次元配列4)★


今回は、文字列の配列について説明します。

文字列自体が配列ですから、文字列の配列とは二次元配列になります。

<イメージ>

文字列

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
続行するには何かキーを押してください・・・

次回も文字列配列を使ったプログラムを作ります。


次へ

戻る

目次へ