[C] Porównanie dwóch napisów
Ostatnio zmodyfikowano 2016-01-10 19:35
mimotego Temat założony przez niniejszego użytkownika |
[C] Porównanie dwóch napisów » 2016-01-09 22:34:05 Cześć, mam za zadanie napisać funkcję, która przyjmie dwa napisy i zwróci 1 jeśli są takie same lub 0 w przeciwnym wypadku. Funkcja ta nie może używać żadnej funkcji bibliotecznej. Zadanie niby proste, jednak nie mogę sobie poradzić. Oto co napisałem: #include<stdio.h>
int porownanieNapisow( char * napis1, char * napis2 ) { int i; for( i = 0;; i++ ) { if( napis1[ i ] != napis2[ i ] ) { return 0; } else return 1; } }
int main() { char pierwszy[] = "Ala ma kota"; char drugi[] = "Ala ma kota i psa"; printf( "%d", porownanieNapisow( pierwszy, drugi ) ); return 0; }
Dla powyższego przykładu funkcja zwraca 1 a powinna 0, dlatego liczę na sugestie jak poprawić ten kod. |
|
carlosmay |
» 2016-01-09 22:41:55 for( i = 0;; i++ ) { if( napis1[ i ] != napis2[ i ] ) { return 0; } else return 1; }
|
Po sprawdzeniu pierwszej litery obu ciągów wykonuje się else return 1; . Pętla powinna zwracać true lub false po sprawdzeniu całych ciągów. Korzystanie z debuggera ułatwia szukanie takich błędów. |
|
1aam2am1 |
» 2016-01-09 22:47:56 #include <cstring>
int porownanieNapisow( const char * napis1, const char * napis2 ) { if( strlen( napis1 ) != strlen( napis2 ) ) { return 0; } while( * napis1 != 0 ) { if( * napis1 != * napis2 ) { return 0; } napis1++; napis2++; } return 1; }
int main() { const char * wsk = "Ala ma kota"; const char * wsk2 = "Ala ma kota i psa"; printf( "Wynik: %i\n", porownanieNapisow( wsk, wsk2 ) ); }
|
|
j23 |
» 2016-01-10 12:47:57 Można nieco uprościć: int porownanieNapisow( const char * s1, const char * s2 ) { while( * s1 == * s2 && * s1 ) { ++s1; ++s2; } return( * s1 - * s2 ) != 0 ? 0 : 1; } |
|
mimotego Temat założony przez niniejszego użytkownika |
» 2016-01-10 19:35:19 Już wszystko działa :) Dzięki wszystkim za pomoc. |
|
« 1 » |