Porównanie stringa do wzorca

0

Cześć, w jaki sposób porównać stringa do wzorca?
Poniżej krótki przykład, program wyświetla: jest, a powinien wyswietlac: brak.
Dzięki z góry za odpowiedzi.

string str="Pies";
  if(str == "Kot" || "Mysz" || "Bocian" || "Kojot" || "Kangur")
    cout << "jest";
  else
  cout << "brak";
5
 if(str == "Kot" || str == "Mysz" || str == "Bocian" || str == "Kojot" || str == "Kangur")
5

if(str == "Kot" || str=="Mysz" || str=="Bocian" || str=="Kojot" || str=="Kangur")
ale lepiej zrobić tablice i sprawdzać w pętli.

vector<string> animals {"Kot","Mysz","Bocian","Kojot","Kangur"};
string str="Pies";
bool found=false;
for(const string &animal:animals) if((found=(animal==str))) break;
cout<<(found?"jest":"brak");
5

Ewentualnie modern C++ jakoś :>

if (std::ranges::any_of(animals.begin(), animals.end(), [&str](const string &s) { return str == s }))
5
Wypierdzistyy napisał(a):

Ewentualnie modern C++ jakoś :>

Wg mnie nie tędy droga:

set<string> animals {"Kot","Mysz","Bocian","Kojot","Kangur"};
cout<<(animals.contains("Pies")?"jest":"brak");
4

@jgroch:

Trafiłeś na bardzo upierdliwą cechę C/C++ : kompatybilność każdego dowolnego wyrażenia z typem boolowskim, (pozornie) wymaganym przez if

W jezykach jak C# czy Java by dało błedy kompilacji, bo żaden operator w stylu || nie przyjmie bool z jednej strony, a stringa z drugiej.

Stara cecha C z lata 1970ch, miało chodzić o oszczędnośći 1-2 rozkazów maszynowych - co dawno nie jest prawdą, podlega to optymalizacji. Tragiocznie zdecydowano w C++, ze ma być z C kompatybilne

To się w C/C++ czyta
str=="Kot" // czy jest kot, wyr logiczne, na razie ok.
||
"Ala ma kota" // wskaznik na string, skoro wskażnik jest nie-null -> true

3
Wypierdzistyy napisał(a):

Ewentualnie modern C++ jakoś :>

if (std::ranges::any_of(animals.begin(), animals.end(), [&str](const string &s) { return str == s }))

To jak chcesz używać any_of w ten sposób to lepiej użyć wersję "klasyczną", nie ranges, jest wtedy krócej std::any_of(........ Jak możesz użyć ranges to wystarczy:

if (std::ranges::any_of(animals, [&str](const string &s) { return str == s; }))

1 użytkowników online, w tym zalogowanych: 0, gości: 1