C 言語では、ヘッダー ファイルには、いくつかの便利で一般的に使用される文字列操作関数を含む標準文字列ライブラリが含まれています。この記事では、関数を使用して C で文字列を比較する方法を説明します。 strcmp()。
C の strcmp() とは何ですか?
C strcmp() は、文字列比較に使用される組み込みライブラリ関数です。この関数は引数として 2 つの文字列 (文字の配列) を受け取ります。 これら 2 つの文字列を辞書編集的に比較します 、結果として 0、1、または -1 を返します。内部で定義されています ヘッダー ファイルとそのプロトタイプは次のようになります。
C の strcmp() の構文
strcmp( first_str , second_str );>
C の strcmp() のパラメータ
この関数は、パラメータとして 2 つの文字列 (文字の配列) を受け取ります。
- first_str: 最初の文字列は定数文字 (つまり、不変文字列) へのポインタとして取得されます。 Second_str: 2 番目の文字列は定数文字へのポインタとして解釈されます。
注記: 引数が char * だけではなく const char * として受け取られる理由は、関数が文字列を変更できず、定数文字列にも適用できるようにするためです。
C の strcmp() の戻り値
strcmp() 関数は、2 つの文字列を比較した後、次の 3 つの異なる値を返します。
1. ゼロ ( 0 )
両方の文字列が同一であることが判明した場合、値はゼロになります。あれは、 両方の文字列の文字はすべて同じです。
2. ゼロより大きい (> 0 )
ゼロより大きい値が返されるのは、 first_str 内の最初の不一致文字の ASCII 値が大きい Second_str の対応する文字よりも または、first_str の文字が辞書編集的に Second_str の文字の後にある場合は、ゼロが返されるとも言えます。
3. ゼロ未満 ( <0 )
ゼロ未満の値が返されるのは、 first_str 内の最初の不一致文字の ASCII 値が小さい よりも Second_str 内の対応する文字 。また、first_str の文字が辞書順で Second_str の文字より前にある場合は、ゼロが返されるとも言えます。
ASCII 値の詳細については、この記事を参照してください。 アスキーテーブル
C で strcmp() 関数を使用する方法
次の例は、C で strcmp() 関数を使用する方法を示しています。
C
// C Program to Demonstrate the use of strcmp() function> #include> #include> int> main()> {> >// declaring two same string> >char>* first_str =>'Geeks'>;> >char>* second_str =>'Geeks'>;> >// printing the strings> >printf>(>'First String: %s
'>, first_str);> >printf>(>'Second String: %s
'>, second_str);> >// printing the return value of the strcmp()> >printf>(>'Return value of strcmp(): %d'>,> >strcmp>(first_str, second_str));> >return> 0;> }> |
果物はいくつありますか
>
>出力
First String: Geeks Second String: Geeks Return value of strcmp(): 0>
C の strcmp() はどのように機能しますか?
C の strcmp() 関数は、 辞書順に 2 つの文字列 。これは、一致しない値が見つかるか、NULL 文字が見つかるまで、各文字の ASCII 値を比較することを意味します。 C の strcmp() 関数の動作は次のように説明できます。
1. まず、両方の文字列の最初の文字の ASCII 値を比較します。
2. 両方の文字列の最初の文字が等しい場合、この関数は 2 番目の文字をチェックし、それらも等しい場合は 3 番目の文字をチェックし、最初の不一致文字が見つかるか NULL 文字が見つかるまで同様に繰り返します。
3. もし NULL文字が見つかりました 、 関数 ゼロを返します 両方の文字列が同じになるためです。
4. 一致しない文字が見つかった場合は、
- 最初の文字列の文字の ASCII 値が 2 番目の文字列の文字の ASCII 値より大きい場合、正の差 ( > 0 ) 間の ASCII 値が返されます。
- 最初の文字列の文字の ASCII 値が 2 番目の文字列の文字の ASCII 値より小さい場合、負の差 (< 0 ) 間の ASCII 値が返されます。
これら 3 つのケースすべてを以下の例で示します。
C での strcmp() の例
例 1. 同一の文字列に対する strcmp() の動作
このプログラムは、同一の文字列に対する strcmp() 関数の動作を示しています。
C
Java文字をintに変換
// C program to illustrate> // strcmp() function> #include> #include> int> main()> {> > >char> first_str[] =>'g f g'>;> >char> second_str[] =>'g f g'>;> > >// Using strcmp()> >int> res =>strcmp>(first_str, second_str);> > >if> (res==0)> >printf>(>'Strings are equal'>);> >else> >printf>(>'Strings are unequal'>);> > >printf>(>'
Value returned by strcmp() is: %d'> , res);> >return> 0;> }> |
>
>出力
Strings are equal Value returned by strcmp() is: 0>
例 2. 辞書順に大きい最初の文字列に対する strcmp() の動作
以下の例は、辞書編集上大きい最初の文字列に対する strcmp() 関数の動作を示しています。
C
// C program to illustrate> // strcmp() function> #include> #include> int> main()> {> >// z has greater ASCII value than g> >char> first_str[] =>'zfz'>;> >char> second_str[] =>'gfg'>;> > >int> res =>strcmp>(first_str, second_str);> > >if> (res==0)> >printf>(>'Strings are equal'>);> >else> >printf>(>'Strings are unequal'>);> > >printf>(>'
Value of result: %d'> , res);> > >return> 0;> }> |
バブルソートJava
>
>出力
Strings are unequal Value of result: 19>
例 3. 辞書順に小さい最初の文字列に対する strcmp() の動作。
以下の例は、辞書編集的に小さい最初の文字列に対する strcmp() 関数の動作を示しています。
C
Javaマップの例
// C program to illustrate> // strcmp() function> #include> #include> int> main()> {> >// b has less ASCII value than g> >char> first_str[] =>'bfb'>;> >char> second_str[] =>'gfg'>;> > >int> res =>strcmp>(first_str, second_str);> > >if> (res==0)> >printf>(>'Strings are equal'>);> >else> >printf>(>'Strings are unequal'>);> > >printf>(>'
Value returned by strcmp() is: %d'> , res);> > > >return> 0;> }> |
>
>出力
Strings are unequal Value returned by strcmp() is: -5>
結論
この記事では、 C標準ライブラリ関数 strcmp() これは、2 つの文字列を辞書編集的に比較するために使用されます。標準ライブラリには、必要に応じてよく使用される関数を何度も書き直す必要がないため、プログラミングが容易になる、頻繁に使用される便利な関数がいくつか含まれています。
C の strcmp() に関する FAQ
1. C で 2 つの文字列を比較するにはどうすればよいですか?
年: ヘッダー ファイル内で定義されている strcmp() 関数を使用して、2 つの文字列 (文字の配列) を辞書編集的に比較できます。
2. C の strcmp() の関数プロトタイプは何ですか?
年: strcmp() 関数の関数プロトタイプは次のとおりです。
int strcmp(const char* lhs , const char* rhs );>
3. strcmp() 関数がゼロを返すとき?
年: 2 つの文字列が同一の場合、strcmp() 関数は 0 を返します。
4. strcmp() 関数による正の戻り値は何を意味しますか?
年: strcmp() 関数は、最初の文字列が辞書編集的に 2 番目の文字列よりも大きい場合に正の値を返します。
5. strcmp() 関数の負の戻り値は何を意味しますか?
年: strcmp() 関数によって返される負の値は、最初の文字列が 2 番目の文字列より辞書順に小さいことを意味します。
6. C の strcmp() 関数は 2 つの文字列をどのように比較しますか?
年: strcmp() 関数は、一致しない文字または NULL 文字が見つかるまで、2 つの文字列の各文字の ASCII 値を比較します。
7. C で strcmp() 関数を使用して非文字列データ型を比較できますか?
年: いいえ、strcmp() 関数は C の非文字列データ型を比較できません。比較できるのは、NULL 文字で終わる可変または不変の文字列データ型のみです。
関連記事:
- C の文字列
- C/C++ で一般的に使用される文字列関数と例