Strings vergleichen
-
Hallo
ich bin gerade dabei ein programm zu schreiben das strings entgegen nimmt.
je nach erhaltenem string soll das programm eine bstimmte aktion starten.
meine frage ist wie kann ich per swich strings vergleichen? ich weiss das switch normalerweise nur einzelne zeichen oder integer werte vergleichen kann, aber es muss doch auch eine möglichkeit geben strings irgend wie umzuwandeln so das sie verglichen werden können.
-
if
else if
else if
...anders gehts net.
-
am besten ist hier wohl eine map<string, Functor>.
-
Speicher doch alle 'Vergleichs'- Strings in ein Array.
Such (mit ner Funktion) den Index des zu testenden Strings, dann haste was fuer switch!
-
Hash-Container
-
ja gut Hash container kenne ich noch nicht, davon stand in meinem anfänger buch nichs drin. welches der lösungen wäre denn eurer meinung nach das unkomplizirteste?
oder fällt euch noch was ein?
-
map<string, Functor>
-
die vom Peter
-
map<string, Functor>
-
sorry das ich da auch nachfragen muss aber map(string,Functor)kenne ich leider auch noch nicht. ich arbeite erst ca ein halbes jahr objektorientiert mit c++ von da her kenne ich ein paar sachen noch nicht.
-
ok, lassen wir den functor weg, wenn du noch neu bist. aber so solltest du das kapieren. minimaler aufwand, kaum eine chance was falsch zu machen, sehr leicht erweiterbar.
#pragma warning(disable:4786); #include<map> #include<string> #include<iostream> using namespace std; void hi(){cout<<"hi"<<endl;} void ho(){cout<<"ho"<<endl;} int main(){ typedef void Func(); typedef map<string,Func*> MSF; MSF m; m["hi"]=hi; m["ho"]=ho; m["hi"](); m["ho"](); return 0; }
-
ho?
bist du PeterTheTroll
-
nochmal um klar zu machen auf welchem niveau ich gerade arbeite. in mienem buch wird kein wort über den bereich von stl verloren ich warte gerade auf ein nes buch. von daher vertehe ich kaum was aus dem code auch wenn ereigentlich noch so einfach ist.
sorry
-
while(strcmp(erste_zeichenkette,zweite_zeichenkette)!=0 ... usw usw a=1;
oder
if(strcmp(erste,zweite)!=0 ...
usw usw
a=2;....
switch(a)
{
case 1:
...
case 2:
...
}So kommst du auch mit einfachsten Mitteln zum Ziel. Und das Ganze bleibt verständlich.
-
jo wirklich einfache lösung die sogar ich verstehe.
-
aber es muss doch auch eine möglichkeit geben strings irgend wie umzuwandeln so das sie verglichen werden können.
Zum vergleichen musst du nix umwandeln:
string str1("Hallo"), str2("hallo"); if (str1 == str2) ...
Falls du ein schlechtes Anfänger Buch hattest und die string nicht beschreiben wurde: string befindet sich in <string> und steht im Namensraum std.
-
beim switch geht das trotzdem nicht
-
Natürlich nicht. Und daran wird sich auch nie etwas ändern.
linux voerschlag ist doch wohl der größte Blödsinn:
if (str1 == str2) a = 1; else if (str1 == str3) a = 2; switch (a) { case 1: ... case 2: ... }
Warum dann nicht direkt
if (str1 == str2) ... else if (str1 == str3) ...
Das ist kürzer un schneller.
-
ups, den hab ich mir nicht richtig angeschaut
(weil keine codetags)
peterthemasters ist auch in ordnung
-
also das buch was ich habe ist zum lernen eigentlich sehr gut da steht nur nichts von der stl und containern drin. mit strcmp klappt die sache eigentlich ganz gut, ist vieleicht nicht die beste und unaufwendigste lösung.
Aber hier erst mal danke an alle die mir helfen wollten.