String aus Zeichen zusammensetzen
-
Hi,
es scheint als wäre
s2 += toupper(s1[i]);
nicht das gleiche wie
s2 = s2 + toupper(s1[i]);Variante 1:
#include <QCoreApplication> #include <iostream> #include <string> #include <cctype> using namespace std; const string& strToUpper(const string& s1) { static string s2 = ""; for(int i = 0; i < s1.length(); i++) s2 += toupper(s1[i]); //Keine Fehlermeldung return s2; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); string p = "abcd"; cout << strToUpper(p); return a.exec(); }
Variante 2:
#include <QCoreApplication> #include <iostream> #include <string> #include <cctype> using namespace std; const string& strToUpper(const string& s1) { static string s2 = ""; for(int i = 0; i < s1.length(); i++) s2 = s2 + toupper(s1[i]); //invalid operands to binary expression ('std::string' (aka 'basic_string<char,... return s2; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); string p = "abcd"; cout << strToUpper(p); return a.exec(); }
-
Das Problem hier ist, dass
toupper
einenint
zurück gibt, und der Compiler dann nicht so recht weiß, was er ausstring + int
machen soll, da beide Seiten gleichberechtigt sind. Ist derstring
fest gesetzt und soll er versuchen denint
zu etwas passendem zu konvertieren? Oder soll er denstring
in irgendwas umwandeln das zuint
passt? Er gibt dir in der Fehlermeldung eine ziemlich lange Liste aller Dinge, die vage in Frage kämen. Daher musst du ihm sagen, was du genau meinst:s2 = s2 + (char) toupper(s1[i]);
Bei
s2 += toupper(s1[i]);
ist die linke Seite hingegen fest gesetzt und es ist klar, dass er nur Konvertierungen der rechten Seite ausprobieren kann, daher geht's dort ohne den Cast.ABER: Das Verhalten deiner Funktion ist grauenhaft. Wieso ist
s2
static? Wieso gibst du eineconst string&
zurück? Hast du mal probiert, was passiert, wenn du deine Funktion mehrmals aufrufst?
-
Der Compiler gibt Fehlermeldungen nur aus, damit du sie kürzen kannst...
-
Danke!
Vollständige Fehlermeldung:
invalid operands to binary expression ('std::string' (aka 'basic_string<char, char_transit<char>, allocator<char> >') and 'int')Wenn ich die Funktion nochmal für einen zweiten String aufrufe wird dieser zweite String an den ersten drangehängt.
Das ist natürlich nicht Sinn der Sache. Daher ist das die Lösung:#include <QCoreApplication> #include <iostream> #include <string> #include <cctype> using namespace std; string strToUpper(const string& s1) { string s2 = ""; for(int i = 0; i < s1.length(); i++) s2 += toupper(s1[i]); return s2; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); string p = "abcd"; cout << strToUpper(p) << endl; string d = "hijk"; cout << strToUpper(d) << endl; return a.exec(); }
-
@theAnfänger77 sagte in String aus Zeichen zusammensetzen:
Vollständige Fehlermeldung:
Das zweifle ich mal stark an.
-
@theAnfänger77 sagte in String aus Zeichen zusammensetzen:
#include <string>
#include <cctype>Die Wurzel deines Übels. Du frickelst dir aus 2 verschiedenen Sprachwelten was zusammen und wunderst dich, dass dabei Probleme auftreten.
Nehme C oder C++ aber nicht beides.