Wiem, że można tylko pojedyncze znaki i liczby używać, ale czy istnieje jakaś podobna instrukcja do używania jak case tekstu?
Można ifami, ale dużo z tym roboty.
O ile mi wiadomo nie jest możliwe stworzenie switch z stringiem
Mi też to wiadomo, ale czy istnieje jakaś instrukcja zamiast switch korzystająca ze stringa?
Wymyśliłem coś takiego, ale nie działa, bo w case nie może być funkcja ;/ Więc zostaje napisać sobie 2 program do zamiany (już napisałem tą funkcję) string'a na int i podstawienie w kodzie int, który ma reprezentować string'a. Kod:
int strtoint(string str)
{
int integer = 0;
for (int i = 0; i < str.length(); i++)
{
integer += int(str[i]);
}
return integer;
}
int main()
{
string str;
int integer = 0;
cin >> str;
for (int i = 0; i < str.length(); i++)
{
integer += int(str[i]); //dodaję każdy znak do integer'a, który zamieniam na int ze string'a
}
switch(integer) //i dzięki temu tu mam liczbę
{
//case strtoint("kot"): cout << "kot"; break; //to niestety nie działa
case 123: (...) //czyli zamieniony string na int
}
return 0;
}
Nie wiem, może się da inaczej, ale na razie tyle tylko wymyśliłem i trzeba ręcznie wpisywać case, ale z samym switch'em działa.
Nie napisałeś jaki język, więc można używać stringów w switch w Javie od JDK 7.
W C++ po case zawsze musi stać stała wartość typu podstawowego (chyba, że się mylę).
Oczywiście, że można używać stringów w case.
A jaki jest cel? Bo może można pozbyć się instrukcji warunkowej i użyć słownika.
Zgodnie ze standardem w case mogą być tylko prymitywy, ale z tego co pamiętam to GCC dopuszcza również stringi.
Swego czasu popularny był język Clipper. Dopuszczał jako case dowolny warunek:
case x>y
...
case z="słoń"
...
Bardzo to było wygodne.
Scala ma Pattern Matching i zamiata resztę pod dywan ;) (tzn resztę nie posiadającą tego)
W Ruby możesz używać nawet typów obiektów.