Bedingter Ausdruck
-
Kannst du dich mal verständlich ausdrücken? Was willst du genau erreichen?
Was soll
tempsein, wie gibst du es aus?
-
Ich nehme mal an, dass temp der
std::stringist und words auch einstd::stringist, denn einstd::vector<std::string>oder ähnliches kann es nicht sein, da der Rückgabewert von Bedingtenanweisungen einheitlich sein muss. Dann ist aber wohl klar, dass dies nicht das gewünschte Ergebnis liefern wird:
words[i] + words[i+1]
Das ist eine Addition von char Werten. Das fügt die Dinger nicht zusammen.
Vielleicht solltest du dieses seltsame und hässliche Konstrukt auseinander nehmen und daraus eine normaleif-elseAnweisung machen.Grüssli
-
Mh gibts keine Möglichkeit daraus einen String zu machen? Ich hab mal dass heir ausprobiert, funzt aber irgendwie nicht so ganz: strcat(words[i],words[i+1])
MfG
Stromberg
-
Ich halte dieses Elend nicht mehr aus:
std::string temp; if(i < (words.size() - 1)) { // Sofern words ein std::string ist. temp.append(words, i, 2); } else { temp = ' '; }Ist auch gleich viel leserlicher.
Grüssli
-
Stromberg* schrieb:
Mh gibts keine Möglichkeit daraus einen String zu machen? Ich hab mal dass heir ausprobiert, funzt aber irgendwie nicht so ganz: strcat(words[i],words[i+1])
MfG
Strombergsollten word[i] und word[i+1] vom typ char sein gibt es einen konstruktor der string-klasse der daraus einen string macht
std::string(1,word[i]) + std::string(1,words[i+1])
-
Oder auch
words.substr(i,2)
-
So, endlich ist es perfekt:
if((temp = (i < (words.size()-1)) ? string(1,words[i])+string(1,words[i+1]) : " ") == "ff") { ++SPECIAL_letters[0]; } else if(temp == "fl") { ++SPECIAL_letters[1]; } else if(temp == "fi") { ++SPECIAL_letters[2]; }Ich Zähle in einem Text die aufeinanderfolgenden Buchstaben Paare "ff" "fi" und "fl" (C++ Primer Übung 6.9).
Findet ihr den Code mit "?"-Operator wirklich so umständlich?MfG
Stromberg
-
Stromberg* schrieb:
Findet ihr den Code mit "?"-Operator wirklich so umständlich?
Wieso schreibst du nicht einfach lesbaren Code?
Code Obfuscation ist nicht wirklich ein Zeichen guter Programmierung.

-
Stromberg* schrieb:
Findet ihr den Code mit "?"-Operator wirklich so umständlich?
Das nicht, aber in Kombination mit der Zuweisung im Ausdruck finde ich's schwierig lesbar. Folgendes würde mir wesentlich besser gefallen:
std::string temp = i<(words.size()-1)? words.substr(i,2) : " "; if( temp == "ff") ...
-
Stromberg schrieb:
Ich Zähle in einem Text die aufeinanderfolgenden Buchstaben Paare "ff" "fi" und "fl" (C++ Primer Übung 6.9).
Badestrand schrieb:
Stromberg* schrieb:
Findet ihr den Code mit "?"-Operator wirklich so umständlich?
Das nicht, aber in Kombination mit der Zuweisung im Ausdruck finde ich's schwierig lesbar. Folgendes würde mir wesentlich besser gefallen:
std::string temp = i<(words.size()-1)? words.substr(i,2) : " "; if( temp == "ff") ...Ich finds immernoch hässlich - und vermutlich ist es auch sinnlos...
if (words.empty ()) return; for (std::string::const_iterator i(words.begin()), e(words.end()-1); i != e; ++i) { if (*i != 'f') continue; switch (*(i+1)) { case 'f': ++SPECIAL_letters[0]; break; case 'l': ++SPECIAL_letters[1]; break; case 'i' ++SPECIAL_letters[2]; break; } }oder allgemeiner:
if ( words.size() < tosearch.size() ) return; for (std::string::const_iterator i(words.begin()), e(words.end()-tosearch.size()); i != e; ++i) { std::string tmp (i, e); if (tmp == tosearch) ++SPECIAL_letters[0]; }Geht bestimmt auch noch hübscher - aber kA...
bb