Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Porównanie dwóch napisów

Ostatnio zmodyfikowano 2016-01-10 19:35
Autor Wiadomość
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:
C/C++
#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.
P-143228
carlosmay
» 2016-01-09 22:41:55
C/C++
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.
P-143230
1aam2am1
» 2016-01-09 22:47:56
C/C++
#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 ) );
}
P-143232
j23
» 2016-01-10 12:47:57
Można nieco uprościć:
C/C++
int porownanieNapisow( const char * s1, const char * s2 )
{
    while( * s1 == * s2 && * s1 ) { ++s1; ++s2; }
    return( * s1 - * s2 ) != 0 ? 0
        : 1;
}
P-143260
mimotego
Temat założony przez niniejszego użytkownika
» 2016-01-10 19:35:19
Już wszystko działa :) Dzięki wszystkim za pomoc.
P-143335
« 1 »
  Strona 1 z 1