Ĺadny brzuch
Mam taki program:
int main() { char a[5]; char b[5]; printf("Wpisz dwa 5-literowe slowa .\n"); cin >> a; cin >> b; if(a == b) { printf("Wpisales dwa identyczne slowa. \n"); } getch(); return 0;
I nierozumiem dlaczego nie działa :(
Wpisuje dwa identyczne słowa, a tu nic .
powinno zadziałać: if (a[0] == b[0] && a[1] == b[1] .... możesz to sprawdzać za pomocą pętli, ale pewnie jest jakaś funkcja która do tego słuzy w bibliotece standardowej.
strcmp??
Eh... porównując a i b porównywałeś wskaźniki [oba są typu char*], więc to co dostawałeś zależało od adresu, na który wskazywały wskaźniki. Jeśli chcesz porównywać teksty po ich wskaźnikach, to użyj funkcji strcmp z <cstring>. strcmp zwraca 0 gdy dwa teksty są równe.
if(std::strcmp(a,b ) == 0 )
{
printf("Wpisales dwa identyczne slowa. \n");
}
Jednak zamiast wskaźników na char lepiej jest używać klasy string z biblioteki standardowej:
std::string a,b;
std::cin >> a >> b;
if(a == b )
{
std::cout << "Identyczne\n";
}
Musisz tylko zaincludować <string>.
A, i jak używasz cin, to używaj też cout a nie printf :)
Pozdrawiam.
//EDIT - poprawilem fragmenty, gdzie kod zamienil sie w usmieszki ;)
Użytkownik TeMPOraL edytował ten post 02 maj 2005, 14:44
Szablony klas tzw. tablice wzorcowe kłaniają się panu :)
//--------------------------------------------------------------------------- #include <iostream.h> #include <string.h> #include <conio.h> #include <stdio.h> //--------------------------------------------------------------------------- template <class T> T porownaj(T a, T b)  { return a<b ? a:b;} template <class T> T czyRowne(T a,T b)  { return a==b  ? a:b;} //--------------------------------------------------------------------------- using namespace std; int main(int argc, char* argv[]) { string aa,bb; aa="ala"; bb="Ala"; // =------------------------------------------------------        // czy rowne string wynik; wynik=czyRowne(aa,bb); if(wynik==aa) { printf("Wpisales dwa identyczne slowa. \n"); } else { printf("Wpisales dwa rozne slowa. \n"); } //----------------------------------------------------------       // ktory wiekszy   string  wyraz="Eden";   string  wyraz1="Ala";     cout<<porownaj(wyraz,wyraz1);     getch();     return 0; } //---------------------------------------------------------------------------
Użytkownik gesiek edytował ten post 01 maj 2005, 11:49
gesiek: ja przepraszam, ale co to ma do rzeczy? Owinąłeś sobie operatory ==, < i > w szablony [swoją drogą nie wiadomo po co], co i tak [bez konkretyzacji szablonu] nie rozwiązuje problemu dla tekstów, na które pokazuje wskaźnik typu char*. Nic się nie kłania, po prostu dużo kodu na nic.
gesiek: ja przepraszam, ale co to ma do rzeczy? Owinąłeś sobie operatory ==, < i > w szablony [swoją drogą nie wiadomo po co], co i tak [bez konkretyzacji szablonu] nie rozwiązuje problemu dla tekstów, na które pokazuje wskaźnik typu char*. Nic się nie kłania, po prostu dużo kodu na nic.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
int main() { char a[5]; char b[5]; printf("Wpisz dwa 5-literowe slowa .\n"); cin >> a; cin >> b; if(a == b) { printf("Wpisales dwa identyczne slowa. \n"); } getch(); return 0;
I nierozumiem dlaczego nie działa :(
Wpisuje dwa identyczne słowa, a tu nic .
powinno zadziałać: if (a[0] == b[0] && a[1] == b[1] .... możesz to sprawdzać za pomocą pętli, ale pewnie jest jakaś funkcja która do tego słuzy w bibliotece standardowej.
strcmp??
Eh... porównując a i b porównywałeś wskaźniki [oba są typu char*], więc to co dostawałeś zależało od adresu, na który wskazywały wskaźniki. Jeśli chcesz porównywać teksty po ich wskaźnikach, to użyj funkcji strcmp z <cstring>. strcmp zwraca 0 gdy dwa teksty są równe.
if(std::strcmp(a,b ) == 0 )
{
printf("Wpisales dwa identyczne slowa. \n");
}
Jednak zamiast wskaźników na char lepiej jest używać klasy string z biblioteki standardowej:
std::string a,b;
std::cin >> a >> b;
if(a == b )
{
std::cout << "Identyczne\n";
}
Musisz tylko zaincludować <string>.
A, i jak używasz cin, to używaj też cout a nie printf :)
Pozdrawiam.
//EDIT - poprawilem fragmenty, gdzie kod zamienil sie w usmieszki ;)
Użytkownik TeMPOraL edytował ten post 02 maj 2005, 14:44
Szablony klas tzw. tablice wzorcowe kłaniają się panu :)
//--------------------------------------------------------------------------- #include <iostream.h> #include <string.h> #include <conio.h> #include <stdio.h> //--------------------------------------------------------------------------- template <class T> T porownaj(T a, T b)  { return a<b ? a:b;} template <class T> T czyRowne(T a,T b)  { return a==b  ? a:b;} //--------------------------------------------------------------------------- using namespace std; int main(int argc, char* argv[]) { string aa,bb; aa="ala"; bb="Ala"; // =------------------------------------------------------        // czy rowne string wynik; wynik=czyRowne(aa,bb); if(wynik==aa) { printf("Wpisales dwa identyczne slowa. \n"); } else { printf("Wpisales dwa rozne slowa. \n"); } //----------------------------------------------------------       // ktory wiekszy   string  wyraz="Eden";   string  wyraz1="Ala";     cout<<porownaj(wyraz,wyraz1);     getch();     return 0; } //---------------------------------------------------------------------------
Użytkownik gesiek edytował ten post 01 maj 2005, 11:49
gesiek: ja przepraszam, ale co to ma do rzeczy? Owinąłeś sobie operatory ==, < i > w szablony [swoją drogą nie wiadomo po co], co i tak [bez konkretyzacji szablonu] nie rozwiązuje problemu dla tekstów, na które pokazuje wskaźnik typu char*. Nic się nie kłania, po prostu dużo kodu na nic.
gesiek: ja przepraszam, ale co to ma do rzeczy? Owinąłeś sobie operatory ==, < i > w szablony [swoją drogą nie wiadomo po co], co i tak [bez konkretyzacji szablonu] nie rozwiązuje problemu dla tekstów, na które pokazuje wskaźnik typu char*. Nic się nie kłania, po prostu dużo kodu na nic.
