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には他にも色々な命令(関数)がありますが、代表的なものだけ紹介しました。