Skocz do zawartości

Instrukcja switch z string


raVVal

Rekomendowane odpowiedzi

Chodzi o to że gdy chcę zrobic tak:

 

switch (odp)
   {
          case "Dzieńdobry" || "Witam" || "dzieńdobry" || "witam" || "dziendobry" || "Dziendobry" : powaga = 3; break;
          case "Serwus" || "serwus" || "Cześć" || "cześć" || "czesc" || "Czesc" || "Hej" || "hej" : powaga = 2; break;
          case "Elo" || "elo" || "siema" || "Siema" || "Ema" || "ema" || "Emo" || "emo" : powaga = 1; break;
          default : napisz("Dlaczego się nie przywitasz?n"); powaga = 1; break;
   }

 

to wyskakuje błąd 14 C:Dev-CppGGmain.cpp switch quantity not an integer edytor to dev-c++

Przez co mam ten błąd?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Nie wiem co to za język, ale:

 

case "costam": case "inne costam": case "kolejne costam": <...>; break;

 

Edit: ah, C++, dopiero zajarzyłem po dziale forum... no jeżeli nie da się jak wyzej, to nie da sie pewnie wcale.

Odnośnik do komentarza
Udostępnij na innych stronach

To to musi być ze switchem? Według mnie chyba powinno wystarczyć ElseIf.

 

EDIT

 

Nie no, bez jaj. Switch z tego co ja wiem jest TYLKO do liczb całkowitych, więc jak chcesz pracować na string'ach to musisz użyć ElseIf. W każdym razie ja innego rozwiązania nie widzę...

 

EDIT2

 

Jedź takim sposobem i gites xD (jedyny minus taki że to będzie chyba długi kod):

 

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string dd ("Dziendobry");
    string dw ("Dobrywieczor");
    
    string odp;
    
    cout << "Napisz 'Dziendobry' lub 'Dobrywieczor'";
    cin >> odp;
    
    if (odp == dd)
    {
        cout << "Napisales Dziendobry";
    }
    else if (odp == dw)
    {
        cout << "Napisales Dobrywieczor";
    }
    else if (odp != dw || odp != dd)
    {
        cout << "Nie znam takiego!";
    }
    
    system("pause>nul");
}

Odnośnik do komentarza
Udostępnij na innych stronach

Wiesz jaki if jest niewydajny przy dużej ilości warunków? Z tego co mi wiadomo, każdy string jest też liczbą. Czyli może dobrym sposobem byłoby konwertowanie stringa na int?

Odnośnik do komentarza
Udostępnij na innych stronach

Wiesz jaki if jest niewydajny przy dużej ilości warunków?

poprzyj argumentem.

 

string to nie liczba, a cstring to wskaznik. nie mozesz od tak zamienic string na liczbe, jesli string nie zawiera tekstowej wartosci tej liczby.

Odnośnik do komentarza
Udostępnij na innych stronach

A nie lepiej zrobić w enum odpowiedniki i za ich pomocą użyć switch'a

 

np.:

 

GML
const char *lista[] = { "napis 1", "napis 2", ...};

 

enum

 

{

 

    ENAPIS1 = 0,

 

    ENAPIS2,

 

    ...

 

};

 

switch(mapis)

 

{

 

    case ENAPIS1:

 

        ...

 

    break;

 

    case ENAPIS2:

 

        ...

 

    break;

 

}

 

(Jeżeli koniecznie chcesz switch'a).

Odnośnik do komentarza
Udostępnij na innych stronach

robi cos typu bota do gadu, wiec nic mu nie dadza enumy, zamiana na inty itp. musi trawic bezposredni tekst. a to wcale zajmujace nie jest, patrz na moc dziesiejszych procesorow, a ajk malo wymaga porownanie napisow

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...