Řetězce lze porovnávat buď pomocí funkce string, nebo bez použití funkce string. Nejprve se podíváme na to, jak můžeme porovnat řetězce pomocí funkce string, tj. strcmp(), který je definován v a řetězec.h hlavičkový soubor.
Porovnání řetězců pomocí funkce řetězce
Řetězcová funkce, která je předdefinována v a řetězec.h hlavičkový soubor je a strcmp() funkce. Funkce strcmp() považuje dva řetězce za parametr a tato funkce vrací celočíselnou hodnotu, kde celočíselná hodnota může být nula , pozitivní nebo negativní .
Syntaxe funkce strcmp() je uvedena níže:
int strcmp (const char* str1, const char* str2);
Ve výše uvedené syntaxi jsou dva parametry předány jako řetězce, tj. str1 a str2 a návratový typ je int znamená, že strcmp() vrací celočíselnou hodnotu.
Funkce strcmp() porovnává charakter obou řetězců. Pokud je první znak obou řetězců stejný, bude tento proces porovnávání pokračovat, dokud nebudou porovnány všechny znaky nebo dokud ukazatel neukáže na znak null ' '.
Možné návratové hodnoty z funkce strcmp().
Návratová hodnota | Popis |
---|---|
0 | Když jsou oba řetězce stejné. |
<0< td> | Pokud je hodnota ASCII znaku prvního řetězce menší než hodnota ASCII znaku druhého řetězce, funkce vrátí zápornou hodnotu. | 0<>
>0 | Pokud je hodnota ASCII znaku prvního řetězce větší než hodnota ASCII znaku druhého řetězce, funkce vrátí kladnou hodnotu. |
Pojďme to pochopit na příkladu.
#include #include int main() { char str1[20]; // declaration of char array char str2[20]; // declaration of char array int value; // declaration of integer variable printf('Enter the first string : '); scanf('%s',str1); printf('Enter the second string : '); scanf('%s',str2); // comparing both the strings using strcmp() function value=strcmp(str1,str2); if(value==0) printf('strings are same'); else printf('strings are not same'); return 0; }
Analýza výše uvedeného programu
- Deklarovali jsme dvě pole typu char, tj. str1 a str2. Uživatelský vstup bereme jako řetězce.
- Řetězce porovnáváme pomocí strcmp() funkce, tj. strcmp(str1,str2). Tato funkce porovná oba řetězce str1 a str2. Pokud funkce vrátí hodnotu 0, znamená to, že oba řetězce jsou stejné, jinak se řetězce nerovnají.
Výstup:
Porovnání řetězců bez použití funkce strcmp().
#include int compare(char[],char[]); int main() { char str1[20]; // declaration of char array char str2[20]; // declaration of char array printf('Enter the first string : '); scanf('%s',str1); printf('Enter the second string : '); scanf('%s',str2); int c= compare(str1,str2); // calling compare() function if(c==0) printf('strings are same'); else printf('strings are not same'); return 0; } // Comparing both the strings. int compare(char a[],char b[]) { int flag=0,i=0; // integer variables declaration while(a[i]!=' ' &&b[i]!=' ') // while loop { if(a[i]!=b[i]) { flag=1; break; } i++; } if(flag==0) return 0; else return 1; }
Analýza výše uvedeného programu
- Ve výše uvedeném jsme deklarovali dvě pole typu char a uživatelský vstup bereme jako řetězce.
- Definovali jsme funkci Compare(), která vezme jako parametr uživatelské vstupní řetězce a porovná oba řetězce. Pokud funkce vrátí 0, což znamená, že oba řetězce jsou stejné, jinak oba řetězce nejsou stejné .
Výstup:
Porovnání řetězců pomocí ukazatelů
#include int stringcompare(char*,char*); int main() { char str1[20]; // declaration of char array char str2[20]; // declaration of char array printf('Enter the first string : '); scanf('%s',str1); printf(' Enter the second string : '); scanf('%s',str2); int compare=stringcompare(str1,str2); // calling stringcompare() function. if(compare==0) printf('strings are equal'); else printf('strings are not equal'); return 0; } // Comparing both the strings using pointers int stringcompare(char *a,char *b) { int flag=0; while(*a!=' ' && *b!=' ') // while loop { if(*a!=*b) { flag=1; } a++; b++; } if(flag==0) return 0; else return 1; }
Analýza výše uvedeného programu
- Vytvořili jsme dvě pole typu char str1 a str2. Uživatelský vstup bereme jako řetězce.
- Definovali jsme funkci stringcompare(), která bude mít jako parametr dva ukazatele typu char. Ukazatel 'a' obsahuje adresu str1 a ukazatel 'b' adresu str2. Uvnitř funkce jsme vytvořili smyčku while, která bude probíhat, dokud se ukazatel a nebo b nedostane na nulový znak.
Výstup: