Sky_Luziferius
23-10-2007, 16:45
hi leute
(ich hoffe mal dieses Unterforum ist das richtige und dass ich einen anderen thread mit einem ähnlichen, bereits gelösten problem nicht übersehen habe)
also ich habe ein kleines Problem mit switch-Anweisungen und meinem Compiler(KDevelop, nutzt gcc 4.1)
also ich habe in meinem Programm einen string(QString) und möchte nun gerne nach den Zeichen im string mittels switch verzweigen:
(Qt arbeitet nunmal mit QString)
#include <QString>
void Funktion(QString meinstring)
{
unsigned int i = 0;
meinstring = "Hallo!"; // wird normalerweise vom benutzer eingegeben,
//hier eine normale zuweisung
while (i != meinstring.length())
{
switch(meinstring[i])
{
case('a'): {/*irgendwas ausführen*/} break;
case('b'): {/*irgendwas ausführen*/} break;
// .......
default: {/*irgendwas ausführen*/}
}
i++;
}
//......
}
dann spuckt mir mein Compiler eine fehlermeldung aus, dass das switch-Argument keine Ganzzahl ist...
stimmt soweit auch, ein QString-Zeichen ist wirklich keine ganzzahl(;)), nur warum soll ich keine anderen zeichen mit switch vergleichen können???
unter windoze mit DevC++ und mit std::string läuft so ein Konstrukt einwandfrei, nur gcc weigert sich, das zu komplieren.
Weiß jemand wie man das umgehen kann, bzw. woran das überhaupt liegt?
sicherlich gibt es da einige memberfunktionen zum vergleichen, wie z.B. compare() bei den STL-strings, nur ob die auch mit QString funktonieren ist dann die frage...(da müsste ich mich noch mal informieren) Das liefert mir zwar das gewünschte Ergebnis, ich habe wirklich keine lust, für alle möglichen Zeichen(gibt ja tausende^^) if-bedingungen
if(meinstring[i] == '/*das gesuchte Zeichen*/')
{/*mache irgendwas*/}
zu schrieben, noch die Zeichen in ascii-code umzuwandeln, den dann in einem in einem int-vector/array etc zu speichern, um die mit switch vergleichen zu können.
mit switch geht das insgesammt rel. einfach und ich bekomme so 4-6 zeichen in eine zeile, ohne das es unübersichtlich wird.
wie gesagt, ich würd gerne wissen woran das liegt, dass der compiler das nicht vergleichen will...
vlt findet sich ja auch eine bessere möglichkeit das zu lösen
thx im vorraus für antworten
mfg
(ich hoffe mal dieses Unterforum ist das richtige und dass ich einen anderen thread mit einem ähnlichen, bereits gelösten problem nicht übersehen habe)
also ich habe ein kleines Problem mit switch-Anweisungen und meinem Compiler(KDevelop, nutzt gcc 4.1)
also ich habe in meinem Programm einen string(QString) und möchte nun gerne nach den Zeichen im string mittels switch verzweigen:
(Qt arbeitet nunmal mit QString)
#include <QString>
void Funktion(QString meinstring)
{
unsigned int i = 0;
meinstring = "Hallo!"; // wird normalerweise vom benutzer eingegeben,
//hier eine normale zuweisung
while (i != meinstring.length())
{
switch(meinstring[i])
{
case('a'): {/*irgendwas ausführen*/} break;
case('b'): {/*irgendwas ausführen*/} break;
// .......
default: {/*irgendwas ausführen*/}
}
i++;
}
//......
}
dann spuckt mir mein Compiler eine fehlermeldung aus, dass das switch-Argument keine Ganzzahl ist...
stimmt soweit auch, ein QString-Zeichen ist wirklich keine ganzzahl(;)), nur warum soll ich keine anderen zeichen mit switch vergleichen können???
unter windoze mit DevC++ und mit std::string läuft so ein Konstrukt einwandfrei, nur gcc weigert sich, das zu komplieren.
Weiß jemand wie man das umgehen kann, bzw. woran das überhaupt liegt?
sicherlich gibt es da einige memberfunktionen zum vergleichen, wie z.B. compare() bei den STL-strings, nur ob die auch mit QString funktonieren ist dann die frage...(da müsste ich mich noch mal informieren) Das liefert mir zwar das gewünschte Ergebnis, ich habe wirklich keine lust, für alle möglichen Zeichen(gibt ja tausende^^) if-bedingungen
if(meinstring[i] == '/*das gesuchte Zeichen*/')
{/*mache irgendwas*/}
zu schrieben, noch die Zeichen in ascii-code umzuwandeln, den dann in einem in einem int-vector/array etc zu speichern, um die mit switch vergleichen zu können.
mit switch geht das insgesammt rel. einfach und ich bekomme so 4-6 zeichen in eine zeile, ohne das es unübersichtlich wird.
wie gesagt, ich würd gerne wissen woran das liegt, dass der compiler das nicht vergleichen will...
vlt findet sich ja auch eine bessere möglichkeit das zu lösen
thx im vorraus für antworten
mfg