V jazyce C obsahuje soubor záhlaví standardní knihovnu řetězců, která obsahuje některé užitečné a běžně používané funkce pro manipulaci s řetězci. V tomto článku uvidíme, jak porovnat řetězce v C pomocí funkce strcmp().
Co je strcmp() v C?
C strcmp() je vestavěná knihovní funkce, která se používá pro porovnávání řetězců. Tato funkce bere dva řetězce (pole znaků) jako argumenty, porovnává tyto dva řetězce lexikograficky a pak jako výsledek vrátí 0,1 nebo -1. Je definován uvnitř hlavičkový soubor s jeho prototypem takto:
Syntaxe strcmp() v C
strcmp( first_str , second_str );>
Parametry strcmp() v C
Tato funkce bere jako parametry dva řetězce (pole znaků):
- first_str: První řetězec je brán jako ukazatel na konstantní znak (tj. neměnný řetězec). second_str: Druhý řetězec je brán jako ukazatel na konstantní znak.
Poznámka: Důvodem, proč jsou argumenty brány jako const char * namísto pouze char *, je to, že funkce nemohla upravit řetězec a také je učinit použitelnými pro konstantní řetězce.
Návratová hodnota strcmp() v C
Funkce strcmp() vrací tři různé hodnoty po porovnání dvou řetězců, které jsou následující:
1. nula ( 0 )
Hodnota rovna nule, pokud jsou oba řetězce shodné. to znamená, všechny znaky v obou řetězcích jsou stejné.
2. Větší než nula (> 0)
Hodnota větší než nula je vrácena, když je první neodpovídající znak v first_str má větší hodnotu ASCII než odpovídající znak v second_str nebo můžeme také říci, že pokud je znak v first_str lexikograficky za znakem second_str, vrátí se nula.
3. Menší než nula ( <0 )
Hodnota menší než nula je vrácena, když je první neodpovídající znak v first_str má nižší hodnotu ASCII než odpovídající znak v second_str . Můžeme také říci, že pokud je znak v first_str lexikograficky před znakem second_str, vrátí se nula.
Další informace o hodnotách ASCII naleznete v tomto článku – Tabulka ASCII
Jak používat funkci strcmp() v C
Následující příklad ukazuje, jak použít funkci strcmp() v C:
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;> }> |
Hru holub pro android
>
>Výstup
First String: Geeks Second String: Geeks Return value of strcmp(): 0>
Jak funguje strcmp() v C?
Funkce C strcmp() funguje tak, že porovnává dva řetězce lexikograficky . To znamená, že porovnává ASCII hodnotu každého znaku, dokud není nalezena neodpovídající hodnota nebo znak NULL. Fungování funkce C strcmp() lze popsat následovně:
1. Začíná porovnáním ASCII hodnot prvních znaků obou řetězců.
2. Pokud jsou první znaky v obou řetězcích stejné, pak tato funkce zkontroluje druhý znak, pokud se rovnají, pak zkontroluje třetí a tak dále, dokud není nalezen první neshodný znak nebo znak NULL.
3. Pokud Byl nalezen znak NULL , funkce vrátí nulu protože oba řetězce budou stejné.
4. Pokud je nalezen neodpovídající znak,
- Pokud je hodnota ASCII znaku prvního řetězce větší než hodnota druhého řetězce, kladný rozdíl ( > 0 ) mezi jejich ASCII hodnotami se vrátí.
- Pokud je hodnota ASCII znaku prvního řetězce menší než hodnota druhého řetězce, pak záporný rozdíl ( < 0 ) mezi jejich ASCII hodnotami se vrátí.
Všechny tyto tři případy jsou demonstrovány v níže uvedených příkladech.
Příklady strcmp() v C
Příklad 1. Chování strcmp() pro identické řetězce
Tento program ukazuje chování funkce strcmp() pro identické řetězce.
C
globální var v js
// 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;> }> |
>
>Výstup
Strings are equal Value returned by strcmp() is: 0>
Příklad 2. Chování strcmp() pro lexikograficky větší první řetězec
Níže uvedený příklad ukazuje chování funkce strcmp() pro lexikograficky větší první řetězec.
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;> }> |
>
python třídící n-tice
>Výstup
Strings are unequal Value of result: 19>
Příklad 3. Chování strcmp() pro lexikograficky menší první řetězec.
Níže uvedený příklad ukazuje chování funkce strcmp() pro lexikograficky menší první řetězec.
C
linuxové chybové kódy
// 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;> }> |
>
>Výstup
Strings are unequal Value returned by strcmp() is: -5>
Závěr
V tomto článku jsme diskutovali o Funkce standardní knihovny C strcmp() který se používá k lexikografickému srovnání dvou řetězců. Standardní knihovna obsahuje některé užitečné a často používané funkce, které usnadňují programování, protože pomáhají vyhnout se opakovanému přepisování běžně používané funkce v případě potřeby.
Časté otázky o strcmp() v C
1. Jak můžeme porovnat dva řetězce v C?
roky: K lexikografickému porovnání dvou řetězců (souboru znaků) můžeme použít funkci strcmp(), která je definována uvnitř hlavičkového souboru.
2. Jaký je funkční prototyp strcmp() v C?
roky: Prototyp funkce strcmp() je následující:
int strcmp(const char* lhs , const char* rhs );>
3. Když funkce strcmp() vrátí nulu?
roky: Funkce strcmp() vrátí nulu, když jsou dva řetězce identické.
4. Co znamená kladná návratová hodnota funkce strcmp()?
roky: Funkce strcmp() vrací kladnou hodnotu, když je první řetězec lexikograficky větší než druhý řetězec.
5. Co znamená záporná návratová hodnota funkce strcmp()?
roky: Záporná hodnota vrácená funkcí strcmp() znamená, že první řetězec je lexikograficky menší než druhý řetězec.
6. Jak funkce strcmp() porovnává dva řetězce v C?
roky: Funkce strcmp() porovnává hodnoty ASCII každého znaku ze dvou řetězců, dokud není nalezen neodpovídající znak nebo znak NULL.
7. Lze funkci strcmp() použít k porovnání neřetězcových datových typů v C?
roky: Ne, funkce strcmp() nemůže porovnávat neřetězcové datové typy v C. Může porovnat pouze datový typ proměnlivý nebo neměnný řetězec zakončený znakem NULL.
Související články:
- Struny v C
- Běžně používané funkce String v C/C++ s příklady