ホームページ > バックエンド開発 > C#.Net チュートリアル > C言語で文字列を比較する方法

C言語で文字列を比較する方法

青灯夜游
リリース: 2023-01-05 16:13:53
オリジナル
39982 人が閲覧しました

比較方法: 1. bcmp()、文字列の最初の n バイトが等しいかどうかを比較します; 2. strcmp()、文字列の大文字と小文字を区別して比較します; 3. strcmp()、サイズではありません-sensitive 書かれた比較文字列; 4. strncmp() または strnicmp()、文字列の最初の n 文字の大文字と小文字を区別した比較。

C言語で文字列を比較する方法

このチュートリアルの動作環境: Windows7 システム、C99 バージョン、Dell G3 コンピューター。

bcmp() を使用します -- メモリ (文字列) の最初の n バイトを比較して、それらが等しいかどうかを確認します

プロトタイプは次のとおりです:

int bcmp(const void *s1, const void * s2, int n);
ログイン後にコピー

[パラメータ] s1、s2 は比較する必要がある 2 つのメモリ (または 2 つの文字列) で、n は比較する長さです。

[戻り値] s1 と s2 の最初の n バイトが等しいか、n が 0 に等しい場合は 0 を返し、それ以外の場合は 0 以外の値を返します。

bcmp() 関数は NULL をチェックしません。

実際、bcmp() と memcmp() には同じ関数があり、メモリ ブロックの最初の n バイトが等しいかどうかを比較するために使用されますが、2 つのパラメータ s1 と s2 はポインタであり、奇妙なことにstring.h ファイルを使用して、文字列を比較することもできます。

例:

#include <stdio.h>
#include <string.h>
int main ()
{
    char *s1 = "Golden Global View";
    char *s2 = "Golden Global View";
    if( !bcmp(s1, s2, 7) )
        printf("s1 equal to s2 in first 7 bytes");
    else
        printf("s1 not equal to s2 in first 7 bytes");
    return 0;
}
ログイン後にコピー

strcmp() を使用します -- 文字列を比較します (大文字と小文字を区別します)

プロトタイプは次のとおりです:

int strcmp(const char *s1, const char *s2);
ログイン後にコピー

[パラメータ] s1、s2 は、比較する必要がある 2 つの文字列です。

文字列サイズの比較は、ASCII コード テーブル内の順序によって決まり、この順序は文字の値でもあります。 strcmp() は、まず s2 の最初の文字値から s1 の最初の文字値を減算します。その差が 0 の場合は、次の文字の比較を続けます。差が 0 でない場合は、その差を返します。たとえば、文字列「Ac」と「ba」を比較すると、文字「A」(65)と「b」(98)の差(-33)が返されます。

[戻り値] パラメータ s1 と s2 の文字列が同じ場合は 0 を返します。 s1 が s2 より大きい場合、0 より大きい値が返されます。 s1 が s2 より小さい場合、0 より小さい値が返されます。

注: strcmp() はバイナリで比較を実行し、マルチバイト文字またはワイドバイト文字を考慮しません。

例:

#include <string.h>
main(){
    char *a = "aBcDeF";
    char *b = "AbCdEf";
    char *c = "aacdef";
    char *d = "aBcDeF";
    printf("strcmp(a, b) : %d\n", strcmp(a, b));
    printf("strcmp(a, c) : %d\n", strcmp(a, c));
    printf("strcmp(a, d) : %d\n", strcmp(a, d));
}
ログイン後にコピー

出力:

strcmp(a, b) : 32
strcmp(a, c) :-31
strcmp(a, d) : 0
ログイン後にコピー

strictmp() を使用します -- 文字列を比較します (大文字と小文字は区別されません)

#プロトタイプは:

int strcmp(char *s1, char *s2);
ログイン後にコピー

[パラメータの説明] s1、s2 は比較する必要がある 2 つの文字列です。

文字列サイズの比較は、ASCII コード テーブル内の順序によって決まり、この順序は文字の値でもあります。 strictmp() は、まず s2 の最初の文字値から s1 の最初の文字値を減算します。その差が 0 の場合は、次の文字の比較を続けます。差が 0 でない場合は、その差が返されます。たとえば、文字列「Ac」と「ba」を比較すると、文字「A」(65)と「b」(98)の差(-33)が返されます。

[戻り値] パラメータ s1 と s2 の文字列が同じ場合は 0 を返します。 s1 が s2 より大きい場合、0 より大きい値が返されます。 s1 が s2 より小さい場合、0 より小さい値が返されます。

注: strictmp() は Windows に固有のものであり、Linux で同じ機能を持つ関数は strcasecmp() であり、ヘッダー ファイル strings.h に含まれています。

大文字と小文字を区別せずに文字列を比較する別の関数は strcmpi() です。strcmpi() は strictmp() のマクロ定義ですが、この関数は実際には提供されていません。

例: 2 つの文字列のサイズを比較します。

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*定义两个字符串*/
    char* s1 = "http://see.xidian.edu.cn/cpp/u/biaozhunku/";
    char* s2 = "http://see.xidian.edu.cn/cpp/shujujiegou/";
    /*比较字符串(不分大小写)*/
    int result = stricmp(s1,s2);  // 也可以改成strcmpi()
    if(result>0)
    {
        printf("Result: s1 > s2");
    }
    else if(result<0)
    {
        printf("Result: s1 < s2");
    }
    else if(result == 0)
    {
        printf("Result: s1 = s2");
    }   
    getchar();/*等待用户输入个字符,然后退出*/
    return 0;
}
ログイン後にコピー

出力:


Result: s1 > s2
ログイン後にコピー

strncmp() を使用します -- 文字列の最初の n 文字を比較します (大文字と小文字は区別されます)

プロトタイプは:

int strncmp ( const char * str1, const char * str2, size_t n );
ログイン後にコピー

[パラメータ] str1、str2 は比較する必要がある 2 つの文字列で、n は比較する文字数です。

文字列サイズの比較は、ASCII コード テーブル内の順序によって決まり、この順序は文字の値でもあります。 strncmp() は、まず s1 の最初の文字値から s2 の最初の文字値を減算します。その差が 0 の場合は、文字終了マーク '\0' まで次の文字の比較を続けます。差が 0 でない場合は、 、差額を返します。たとえば、文字列「Ac」と「ba」を比較すると、文字「A」(65)と「b」(98)の差(-33)が返されます。

注: 比較される文字には文字列の終了マーク '\0' が含まれており、'\0' に遭遇すると比較は終了します。n が何であっても、後続の文字は継続されません。比較される。

[戻り値] str1 と str2 の最初の n 文字が同じ場合は 0 を返し、s1 が s2 より大きい場合は 0 より大きい値を返し、s1 が s2 より小さい場合は値を返します。 0未満。

注: 2 つの文字が異なる場合、GCC はその文字に対応する ASCII コードの差を返し、VC は -1 または 1 を返します。しかし、恥ずかしいのは、strnicmp()、strcmp()、および strictmp() がすべて、ASCII の違いではなく、GCC と VC では -1 または 1 を返すことです。

例: 2 つの文字列セットを比較します。

#include<stdio.h>
#include<string.h>
int main(void){
    char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
    char* s2 = "HTTP://see.xidian.edu.cn/cpp/u/xitong/";
    char* s3 = "abc";
    char* s4 = "abcxyz";
    char* s5 = "123456";
    char* s6 = "123";
    printf("s1-s2=%d\n", strncmp(s1, s2, 20));  // 是否区分大小写
    printf("s3-s4=%d\n", strncmp(s3, s4, 100));  // s3的长度小于s4
    printf("s5-s6=%d\n", strncmp(s5, s6, 100));  // s5的长度大于s6
    return 0;
}
ログイン後にコピー

VC6.0 での実行結果:

s1-s2=1
s3-s4=-1
s5-s6=1
ログイン後にコピー

GCC での実行結果:

s1-s2=32
s3-s4=-120
s5-s6=52
ログイン後にコピー

strnicmp() を使用 -- 文字列の最初の n 文字を比較します(大文字と小文字が区別されます)

プロトタイプは次のとおりです:

int strnicmp ( const char * str1, const char * str2, size_t n );
ログイン後にコピー

[パラメータ] str1、str2 は比較する必要がある 2 つの文字列で、n は比較する文字数です。比較した。

[戻り値] str1 と str2 の最初の n 文字が同じ場合は 0 を返し、s1 が s2 より大きい場合は 0 より大きい値を返し、s1 が s2 より小さい場合は値を返します。 0未満。

strncmp() との違いは、2 つの文字が異なる場合、GCC と VC の両方が、対応する ASCII の差を返すのではなく、-1 または 1 を返すことです。

strnicmp() に関するその他の手順については、「strncmp()」を参照してください。これは単なる例であり、繰り返しません。

另外一个不区分大小写比较字符串前n个字符的函数是strncmpi(),strncmpi()是strnicmp()的宏定义,实际未提供此函数。

示例:对6组字符串进行比较。

#include<stdio.h>
#include<string.h>
int main(void){
    char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
    char* s2 = "HTTP://see.xidian.edu.cn/cpp/u/xitong/";
    char* s3 = "abc";
    char* s4 = "abcxyz";
    char* s5 = "123456";
    char* s6 = "123";
    printf("s1-s2=%d\n", strnicmp(s1, s2, 20));  // 是否区分大小写
    printf("s3-s4=%d\n", strnicmp(s3, s4, 100));  // s3的长度小于s4
    printf("s5-s6=%d\n", strnicmp(s5, s6, 100));  // s5的长度大于s6
    return 0;
}
ログイン後にコピー

VC6.0下运行结果:

s1-s2=0
s3-s4=-1
s5-s6=1
ログイン後にコピー
ログイン後にコピー

GCC下运行结果:

s1-s2=0
s3-s4=-1
s5-s6=1
ログイン後にコピー
ログイン後にコピー

相关推荐:《C语言视频教程

以上がC言語で文字列を比較する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート