[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 » |