toupper ..
-
hi
std::string wort = "hallo Welt!"; std::cout << wort << std::endl; std::string::iterator iter = wort.begin(); while(iter != wort.end() { wort[iter] = toupper(wort[iter]); *(++iter); } std::cout << wort << std::endl;wieso geht das net?
ich will dass die varialbe "wort" nur großbuchstaben enthält
#include <cctype> und die anderen Header sind schon mittendrin.
-
versuchs mal mit der transform() funktion
-
Ein Iterator ist kein Index, sondern funktioniert eher wie ein Pointer - das heißt, du mußt ihn dereferenzieren (*iter) und nicht an den Index-Operator des String übergeben (wort[iter] ist Unsinn).
-
"wieso geht das nicht" -> geht WAS nicht ! -> Anständige Fehlerbeschreibungen posten !
Trotzdem: Schau nochmal drüber, dann siehst du das da ne Klammer fehlt. Zudem bringt es auch nichts iter zu dereferenzieren.
Edit: Das Deferenzieren bezieht sich auf *(++iter). Das von CSToll habe ich nicht bemerkt ...
-
CStoll schrieb:
Ein Iterator ist kein Index, sondern funktioniert eher wie ein Pointer - das heißt, du mußt ihn dereferenzieren (*iter) und nicht an den Index-Operator des String übergeben (wort[iter] ist Unsinn).
Danke CStoll, du bist der einzige hier,der eine vernünftige Antwort schreibt und natürlich auch Firefighter

wort[0] = toupper(wort[0]);So hab ich nur einen Buchstaben in einen Großbuchstaben umwandelt, wie es mit einer While/For schleife geht, weiß ich auch

VIELEN DANK!
@Kasf: sag bitte nichts mehr dazu, du gibst ständig irgendwelche unnötigen kommentare dazu(das mit der klammer.. hab ich nur hier vergessen reinzuschreiben)

-
thelast schrieb:
Danke CStoll, du bist der einzige hier,der eine vernünftige Antwort schreibt und natürlich auch Firefighter

Was KasF geschrieben hat hatte dennoch Hand und Fuss. Einfach Code hinzuschreiben und zu sagen "geht nicht" ohne dazu zu sagen was nicht geht ist eine Zumutung. Vor allem wenn du damit den Anschein erweckst, einfach Antworten zu fordern ohne dich selbst ein wenig mit dem Problem auseinandergesetzt zu haben.
-
So um es mal richtig zu stellen:
#include <string> // std::string #include <cctype> // std::toupper #include <iostream> // std::cout; std::endl std::string word = "Hallo Welt!"; std::cout << word << std::endl; std::string::iterator iter = word.begin(); while(iter != word.end()) { (*iter) = std::toupper((*iter)); ++iter; } std::cout << word << std::endl;... so ... das geht mit einer for-Schleife besser!
#include <string> // std::string #include <cctype> // std::toupper #include <iostream> // std::cout; std::endl std::string word("Hallo Welt!"); std::cout << word << std::endl; for (std::string::iterator it = word.begin(); it != word.end(); ++it) (*it) = std::toupper((*it)); std::cout << word << std::endl;... und am besten:
#include <string> // std::string #include <cctype> // std::toupper #include <iostream> // std::cout; std::endl #include <algorithm> // std::transform std::string word("Hallo Welt!"); std::cout << word << std::endl; std::transform(word.begin(), word.end(), word.begin(), std::toupper); std::cout << word << std::endl;
-
(D)Evil schrieb:
#include <string> // std::string #include <cctype> // std::toupper #include <iostream> // std::cout; std::endl std::string word = "Hallo Welt!"; std::cout << word << std::endl; std::string::iterator iter = word.begin(); while(iter != word.end()) { (*iter) = std::toupper((*iter)); ++iter; } std::cout << word << std::endl;word = std::toupper(*iter);
so geht das

-
pumuck1 schrieb:
word = std::toupper(*iter);
so geht das

nicht wirklich

-
c++ std::string das beste wo gibt