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

May 08, 2021 pm 03:05 PM
C言語 文字列比較

比較方法: 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語データ構造:ツリーとグラフのデータ表現と操作 C言語データ構造:ツリーとグラフのデータ表現と操作 Apr 04, 2025 am 11:18 AM

C言語データ構造:ツリーとグラフのデータ表現は、ノードからなる階層データ構造です。各ノードには、データ要素と子ノードへのポインターが含まれています。バイナリツリーは特別なタイプの木です。各ノードには、最大2つの子ノードがあります。データは、structreenode {intdata; structreenode*left; structreenode*右;}を表します。操作は、ツリートラバーサルツリー(前向き、順序、および後期)を作成します。検索ツリー挿入ノード削除ノードグラフは、要素が頂点であるデータ構造のコレクションであり、近隣を表す右または未照明のデータを持つエッジを介して接続できます。

C言語ファイルの操作問題の背後にある真実 C言語ファイルの操作問題の背後にある真実 Apr 04, 2025 am 11:24 AM

ファイルの操作の問題に関する真実:ファイルの開きが失敗しました:不十分な権限、間違ったパス、およびファイルが占有されます。データの書き込みが失敗しました:バッファーがいっぱいで、ファイルは書き込みできず、ディスクスペースが不十分です。その他のFAQ:遅いファイルトラバーサル、誤ったテキストファイルエンコード、およびバイナリファイルの読み取りエラー。

C言語関数の基本的な要件は何ですか C言語関数の基本的な要件は何ですか Apr 03, 2025 pm 10:06 PM

C言語関数は、コードモジュール化とプログラム構築の基礎です。それらは、宣言(関数ヘッダー)と定義(関数体)で構成されています。 C言語は値を使用してパラメーターをデフォルトで渡しますが、外部変数はアドレスパスを使用して変更することもできます。関数は返品値を持つか、または持たない場合があり、返品値のタイプは宣言と一致する必要があります。機能の命名は、ラクダを使用するか、命名法を強調して、明確で理解しやすい必要があります。単一の責任の原則に従い、機能をシンプルに保ち、メンテナビリティと読みやすさを向上させます。

C言語でカウントダウンを出力する方法 C言語でカウントダウンを出力する方法 Apr 04, 2025 am 08:54 AM

Cのカウントダウンを出力する方法は?回答:ループステートメントを使用します。手順:1。変数nを定義し、カウントダウン数を出力に保存します。 2。whileループを使用して、nが1未満になるまでnを連続的に印刷します。 3。ループ本体で、nの値を印刷します。 4。ループの端で、n x 1を減算して、次の小さな相互に出力します。

CSウィーク3 CSウィーク3 Apr 04, 2025 am 06:06 AM

アルゴリズムは、問題を解決するための一連の指示であり、その実行速度とメモリの使用量はさまざまです。プログラミングでは、多くのアルゴリズムがデータ検索とソートに基づいています。この記事では、いくつかのデータ取得およびソートアルゴリズムを紹介します。線形検索では、配列[20,500,10,5,100,1,50]があることを前提としており、数50を見つける必要があります。線形検索アルゴリズムは、ターゲット値が見つかるまで、または完全な配列が見られるまで配列の各要素を1つずつチェックします。アルゴリズムのフローチャートは次のとおりです。線形検索の擬似コードは次のとおりです。各要素を確認します:ターゲット値が見つかった場合:return true return false c言語実装:#include#includeintmain(void){i

C言語でファイルを処理するためのヒントのトラブルシューティング C言語でファイルを処理するためのヒントのトラブルシューティング Apr 04, 2025 am 11:15 AM

C言語処理ファイルのヒントのトラブルシューティングファイルをC言語で処理するとき、さまざまな問題に遭遇する可能性があります。以下は一般的な問題であり、対応するソリューション:問題1:ファイルコードを開くことができません:ファイル*fp = fpen( "myfile.txt"、 "r"); if(fp == null){//ファイルの開く}理由:ファイルパスエラーファイルは存在しません。 Charbuffer [100]; size_tread_bytes = fread(buffer、1、siz

C言語関数の概念とその定義形式 C言語関数の概念とその定義形式 Apr 03, 2025 pm 11:33 PM

C言語関数は、再利用可能なコードブロック、処理のパラメーターを受信し、結果を返すことです。それはスイスの陸軍ナイフに似ており、強力であり、慎重に使用する必要があります。関数には、形式の定義、パラメーター、戻り値、関数体などの要素が含まれます。高度な使用には、関数ポインター、再帰関数、コールバック関数が含まれます。一般的なエラーはタイプの不一致であり、プロトタイプの宣言を忘れています。デバッグスキルには、変数の印刷とデバッガーの使用が含まれます。パフォーマンス最適化は、インライン関数を使用します。関数設計は、単一の責任の原則に従う必要があります。 C言語関数の習熟度は、プログラミングの効率とコードの品質を大幅に向上させることができます。

C言語関数の返品値の種類は何ですか? C言語関数の返品値のタイプの概要? C言語関数の返品値の種類は何ですか? C言語関数の返品値のタイプの概要? Apr 03, 2025 pm 11:18 PM

c言語関数の返品値タイプには、int、float、double、char、void、およびポインタータイプが含まれます。 intは整数を返すために使用され、フロートとダブルはフロートを返すために使用され、charは文字を返します。 voidとは、関数が値を返さないことを意味します。ポインタータイプはメモリアドレスを返し、メモリの漏れを避けるように注意してください。構造またはコンソーシアムは、複数の関連データを返すことができます。

See all articles