★文字と文字列(文字列8)★


string.hをインクルードすることで、様々な文字列操作が可能になります。

全て紹介することは避けて、代表的なものをいくつか説明します。


最初は文字列同士が同じかどうか比較する命令(関数)を紹介します。

strcmpは[string compare]の略で、2つの文字列の比較結果を返します。

サンプルを打ち込んで実行してください。


<sample program 088-01>

#include <stdio.h>
#include <string.h>

#define MAX_STRING 10

int main(void)
{
    char str[MAX_STRING] = "ABC";

    int result;

    result = strcmp( str, "ABC");

    printf("result = %d\n", result);

    result = strcmp( str, "DEF");

    printf("result = %d\n", result);

    result = strcmp( str, "012");

    printf("result = %d\n", result);

    return 0;
}

<実行結果>

result = 0
result = -1
result = 1
続行するには何かキーを押してください・・・

配列strには"ABC"という文字列が入っています。

このstrと"ABC"、"DEF"、"012"という3つの文字列を比較しました。

内部では、1文字ずつ比較を行い、文字コードの大小関係にしたがって結果を返してくれます。

strの中身と文字列"ABC"はまったく同じです。

結果(result)は0と表示されていますが、これが「同じ文字列だった」という意味です。


"DEF"については少し細かく説明しましょう。

まず'A'と'D'が比較されます。

文字コード」を見ると'A'の方が数的に小さいコードが割り当てられています

そこで"ABC"と"DEF"では、"ABC"の方が小さいという意味で−1が返されています


"012"も同じように比較され、'A'と'0'だと'A'の方が大きいですから、"ABC"の方が大きいという意味で1が返されています


「文字列」に大小関係が必要なのか?と思う方もいるかも知れませんが、名前順にソートしたりすることも十分考えられますよね。

その時に「文字列」の大小関係が分からなければソートが出来ません。


次は文字列の中から指定した文字を探すstrchrの説明をします。

strchrは[string character]の略だと思いますが、そのままだと何のことか分かりませんよね。

英語のサイトを見ると[character in the string]と説明があります。

とりあえずサンプルを実行してみましょう。

<sample program 088-02>

#include <stdio.h>
#include <string.h>

#define MAX_STRING 10

int main(void)
{
    char str[MAX_STRING] = "ABCDEFGHI";

    char c;

    scanf("%c", &c);

    if (strchr( str, c)) {
        printf("ありました!\n");
    }
    else {
        printf("ありませんでした!\n");
    }

    return 0;
}

<実行結果>

D
ありました!
続行するには何かキーを押してください・・・
Z
ありませんでした!
続行するには何かキーを押してください・・・

strcmpの時は変数resultに結果を入れて表示しましたが、今回はif文に直接命令(関数)を書きました。

探したい文字があった場合は「成立(0以外)」、なかった場合は「不成立(0)」となります。

strchrも値を返すのですが、探したい文字が見つかった場所(ポインタ)が返ってきます。

ポインタの説明はずいぶん先になりますから、ここでは割愛します。


最後に文字列の中から指定した文字列を探すstrstrを紹介します。

サンプルを実行してみてください。

<sample program 088-03>

#include <stdio.h>
#include <string.h>

#define MAX_STRING 10

int main(void)
{
    char str1[MAX_STRING] = "ABCDEFGHI";
    char str2[MAX_STRING];

    scanf("%s", str2);

    if (strstr( str1, str2)) {
        printf("ありました!\n");
    }
    else {
        printf("ありませんでした!\n");
    }

    return 0;
}

<実行結果>

DEF
ありました!
続行するには何かキーを押してください・・・
ABE
ありませんでした!
続行するには何かキーを押してください・・・

説明についてはstrchrと同じです。

str1の中にstr2が含まれていれば成立、そうでなければ不成立となります。

実際にはstrchrと同じように場所(ポインタ)が返されています。


string.hには他にも色々な命令(関数)がありますが、代表的なものだけ紹介しました。


次へ

戻る

目次へ