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 |
オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。 |