こんばんは。きわさです。
C言語の文字列操作の備忘録その2です。
strcmp
文字列を比較する
書式
int strcmp(const char *s1, const char *s2)
概要
s1とs2の文字列を比較し、同値であれば0、同値でなければ0以外を返す。
引数
const char *s1: 文字列1のポインタ
const char *s2: 文字列2のポインタ
戻り値
正の数: s1が大きい
0: s1とs2が等しい
負の数: s2が大きい
使用例
#include "string.h" void main(void) { char str1[] = "Sample"; char str2[] = "Message"; char str3[] = "Message"; int ret = 0; ret = strcmp(str1, str2); printf("%d\n", ret); ret = strcmp(str2, str1); printf("%d\n", ret); ret = strcmp(str2, str3); printf("%d\n", ret); return; }
結果
6
-6
0
str1とstr2を比較すると”Sample”と”Message”で1文字目から異なっています。そして’S’は0x53(83)、’M’は0x4d(77)で差は6です。そのため、結果は6と-6が出力されています。
str2とstr3では文字列はどちらも”Message”で等しいため0となります。
strncmp
指定したバイト数だけ文字列を比較する
書式
int strncmp(const char *s1, const char *s2, size_t len)
概要
s1とs2の文字列をlenバイトまで比較し、同値であれば0、同値でなければ0以外を返す。
引数
const char *s1: 文字列1のポインタ
const char *s2: 文字列2のポインタ
size_t len: 比較する文字列長
戻り値
正の数: s1が大きい
0: s1とs2が等しい
負の数: s2が大きい
使用例
#include "string.h" void main(void) { char str1[] = "Sample1"; char str2[] = "Sample2"; int ret = 0; ret = strncmp(str1, str2, 7); printf("%d\n", ret); ret = strncmp(str1, str2, 6); printf("%d\n", ret); return; }
結果
-1
0
str1とstr2を7バイト比較すると最後の1文字が違います。6バイトまでであればどちらも”Sample”であるので同値となります。
strspn
文字列に文字群を含む長さを求める
書式
size_t strspn(const char *s1, const char *s2)
概要
文字列s1の先頭から、文字群s2のいずれかを含む文字列長を返す。
引数
const char *s1: 文字列のポインタ
const char *s2: 文字群
戻り値
文字群を含む長さ
使用例
#include "string.h" void main(void) { char str1[] = "Sample Message"; char str2[] = "e"; char str3[] = "ampS"; int ret = 0; ret = strspn(str1, str2); printf("%d\n", ret); ret = strspn(str1, str3); printf("%d\n", ret); return; }
結果
0
4
“Sample Message”の先頭は’S’で文字群”e”のいずれでもないため0となります。
また、”Samp”は文字群”ampS”に含まれるため、4となります。
strcspn
文字列に文字群を含まない長さを求める
書式
size_t strcspn(const char *s1, const char *s2)
概要
文字列s1の先頭から、文字群s2のいずれも含まない文字列長を返す。
引数
const char *s1: 文字列のポインタ
const char *s2: 文字群
戻り値
文字群を含まない長さ(=文字群のいずれかが初めて現れるまでの長さ)
使用例
#include "string.h" void main(void) { char str1[] = "Sample Message"; char str2[] = "e"; char str3[] = "ea"; int ret = 0; ret = strcspn(str1, str2); printf("%d\n", ret); ret = strcspn(str1, str3); printf("%d\n", ret); return; }
結果
5
1
“Sample Message”のうち”Sampl”には”e”は含まれないため5となり、”ea”のいずれも含まないのは先頭から”S”だけのため1となります。
文字列の比較や探索も便利ですね。