C言語で文字列を操作する(2)

こんばんは。きわさです。

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となります。

文字列の比較や探索も便利ですね。

スポンサーリンク