Nizovi se mogu uspoređivati korištenjem funkcije niza ili bez korištenja funkcije niza. Prvo ćemo pogledati kako možemo usporediti nizove uz pomoć funkcije niza, tj. strcmp(), koji je definiran u a niz.h datoteka zaglavlja.
Usporedba nizova korištenjem funkcije niza
Funkcija niza koja je unaprijed definirana u a niz.h datoteka zaglavlja je a strcmp() funkcija. Funkcija strcmp() razmatra dva niza kao parametar, a ova funkcija vraća vrijednost cijelog broja gdje se vrijednost cijelog broja može nula , pozitivan ili negativan .
Sintaksa funkcije strcmp() dana je u nastavku:
int strcmp (const char* str1, const char* str2);
U gornjoj sintaksi, dva parametra se prosljeđuju kao nizovi, tj. str1 i str2 , a vrsta povrata je int znači da strcmp() vraća vrijednost cijelog broja.
Funkcija strcmp() uspoređuje karakter oba niza. Ako je prvi znak oba niza isti, tada će se ovaj proces usporedbe nastaviti dok se svi znakovi ne usporede ili dok pokazivač ne pokaže na nulti znak ' '.
Moguće povratne vrijednosti iz funkcije strcmp().
Povratna vrijednost | Opis |
---|---|
0 | Kada su oba niza jednaka. |
<0< td> | Ako je ASCII vrijednost znaka prvog niza manja od ASCII vrijednosti znaka drugog niza, funkcija će vratiti negativnu vrijednost. | 0<>
>0 | Ako je ASCII vrijednost znaka prvog niza veća od ASCII vrijednosti znaka drugog niza, funkcija će vratiti pozitivnu vrijednost. |
Shvatimo kroz primjer.
#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; }
Analiza gore navedenog programa
- Deklarirali smo dva niza tipa char, tj. str1 i str2. Korisnički unos uzimamo kao nizove.
- Uspoređujemo nizove koristeći strcmp() funkciju, tj. strcmp(str1,str2). Ova funkcija će usporediti nizove str1 i str2. Ako funkcija vrati vrijednost 0, to znači da su oba niza ista, inače nizovi nisu jednaki.
Izlaz:
Usporedba nizova bez korištenja funkcije 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; }
Analiza gore navedenog programa
- U gornjem smo deklarirali dva niza tipa char, a korisnički unos uzimamo kao nizove.
- Definirali smo funkciju compare() koja će uzeti nizove unosa korisnika kao parametar i usporediti oba niza. Ako funkcija vrati 0, što znači da su oba niza jednaka, inače oba niza nisu jednaka .
Izlaz:
Usporedba nizova pomoću pokazivača
#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; }
Analiza gore navedenog programa
- Napravili smo dva polja tipa char str1 i str2. Korisnički unos uzimamo kao nizove.
- Definirali smo funkciju stringcompare() koja će uzeti dva pokazivača tipa char kao parametar. Pokazivač 'a' sadrži adresu str1, a pokazivač 'b' sadrži adresu str2. Unutar funkcije stvorili smo while petlju koja će se izvršavati sve dok pokazivač a ili b ne dosegne nulti znak.
Izlaz: