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

Porównanie tablic typu char

Ostatnio zmodyfikowano 2016-08-23 01:18
Autor Wiadomość
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.
C/C++
//...
char wybor[ 4 ];
char tablica_tak[ 4 ] { "tak" };
char tablica_nie[ 4 ] { "nie" };
cin >> wybor;
if( wybor == tablica_tak )
{ //kod }
    else if( wybor == tablica_nie )
    { //kod }
        //... reszta kodu
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.
P-151044
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 ==.
P-151047
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" )
P-151049
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:
C/C++
#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:
C/C++
#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;
}
P-151050
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
P-151051
« 1 »
  Strona 1 z 1