Porównanie tablic typu char
Ostatnio zmodyfikowano 2016-08-23 01:18
latajacaryba Temat założony przez niniejszego użytkownika |
Porównanie tablic typu char » 2016-08-23 00:30:00 Witam. Piszę program, w którym w pewnym momencie użytkownik musi dokonać wyboru, zadecydować czy wybiera jasną, czy ciemną stronę mocy. char wybor[ 4 ]; char tablica_tak[ 4 ] { "tak" }; char tablica_nie[ 4 ] { "nie" }; cin >> wybor; if( wybor == tablica_tak ) { else if( wybor == tablica_nie ) {
I niestety nic się nie dzieje. Poza tym czym różni się string od tablicy char? Powinienem używać stringów czy tablic? Z góry dziękuję za pomoc. |
|
michal11 |
» 2016-08-23 00:56:28 Ty nie porównujesz napisów tylko adresy dwóch tablic bo do tego sprowadza się wybor == tablica_tak . Jeżeli chcesz porównać 2 C-stringi użyj funkcji strcmp(). W twoim przypadku pewnie lepszym wyjściem byłoby użycie stringów i wtedy możesz je porównywać operatorem ==. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-08-23 01:02:16 a co muszę zrobić, by podać wartość a nie adres tablicy? czyli np co zrobić żeby to było prawdą: if( tablica == "tak" ) |
|
michal11 |
» 2016-08-23 01:12:00 Nie ma znaczenia czy porównujesz 2 zmienne, czy zmienna z jakąś wartością, zasada jest ta sama, jeżeli są to c-stringi to używasz funkcji strcmp() jeżeli stringi to operatora==. Może to ci pomoże: #include <iostream> #include <cstring> #include <string> using namespace std;
int main() { const string s = "nie"; const char tab[] { "tak" }; if( strcmp( tab, "tak" ) == 0 ) { cout << "equals" << endl; } else { cout << "not equals" << endl; } if( s == "tak" ) { cout << "equals 2" << endl; } else { cout << "not equals 2" << endl; } if( s == tab ) { cout << "equals 3" << endl; } else { cout << "not equals 3" << endl; } if( strcmp( tab, s.c_str() ) == 0 ) { cout << "equals 3" << endl; } else { cout << "not equals 3" << endl; } return 0; }
Edit. Napisałem drugą krótsza wersję. To jest to samo co wyżej tylko inaczej sformatowane: #include <iostream> #include <cstring> #include <string> using namespace std;
int main() { const string s = "nie"; const char tab[] { "tak" }; if( strcmp( tab, "tak" ) == 0 ) { cout << "equals" << endl; } else { cout << "not equals" << endl; } if( s == "tak" ) { cout << "equals 2" << endl; } else { cout << "not equals 2" << endl; } if( s == tab ) { cout << "equals 3" << endl; } else { cout << "not equals 3" << endl; } if( strcmp( tab, s.c_str() ) == 0 ) { cout << "equals 3" << endl; } else { cout << "not equals 3" << endl; } return 0; }
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-08-23 01:18:23 Jak zawsze mogę liczyć na to forum :)) Wielkie dzięki. Temat zamykam |
|
« 1 » |