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