文字列の関数

C言語の場合、string.h をインクルードすることで、char 型配列で構成された文字列を操作するための様々な関数を使用することができます。string.h に含まれる主な関数は以下の通りです。

関数名 機能
int strlen(char[] str) 文字列 str の長さを返す
char[] strcpy(char[] s1, char[] s2) 文字列 s1 に文字列 s2 をコピーする
char[] strcat(char[] s1, char[] s2) 文字列 s1 に文字列 s2 を連結する
char[] strstr(char[] s1, char[] s2) 文字列 s1 から文字列 s2 を探す:
見つかったときその位置のアドレスを返す
見つからなかったとき NULL を返す
int strcmp(char[] s1, char[] s2) 文字列 s1 と文字列 s2 を比較する:
s1 = s2 のとき 0 を返す
s1 < s2(s1 の方が辞書順で前)のとき '負' を返す
s1 > s2(s2 の方が辞書順で前)のとき '正' を返す

※ NULL とは何も指さないポインタを表すための定数のこと


文字列の長さ

strlen関数で文字列の長さを取得することができます。たとえば、次のプログラムは文字列nameの長さを出力します。

char name[10] = "Tree";
printf("%d\n", strlen(name); /* 4 */

文字列の連結

次のプログラムでは、入力した2つの文字列の連結とコピーを行っています。

char str1[100], str2[100], str3[100];

scanf("%s %s", str1, str2);               /* 2つの文字列を読み込む */

printf("%s (%d)\n", str1, strlen(str1));  /* 文字列の長さを出力する*/
printf("%s (%d)\n", str2, strlen(str2));  /* 文字列の長さを出力する*/

strcat(str1, str2);                       /* 文字列 str1 に文字列 str2 を連結する */
printf("%s\n", str1);

strcpy(str3, str1);                       /* 文字列 str3 に文字列 str1 をコピーする*/

if ( strcmp(str1, str3) == 0 ){           /* 文字列 str1 と文字列 str3 を比較する*/
    printf("%s = %s", str1, str3);
}
標準入力標準出力
ACM ICPC ACM (3)
ICPC (4)
ACMICPC
ACMICPC = ACMICPC

文字列の検索

次のプログラムでは、strstr 関数を用いて文字列 str1 の中に文字列 str2 が含まれるかを判定しています。

char str1[100], str2[100];

scanf("%s %s", str1, str2);

if ( strstr(str1, str2) == NULL ) printf("No\n");
else printf("Yes\n");
標準入力標準出力
aizuzia
zuz
Yes
aizuzia
zuk
No

Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。