Eine Frage
-
Gut, ich werde es mir merken.
Danke für die rasche Antwort!Das klappt wunderbar, es ergibt sich jedoch ein weiteres Problem ->
Wenn ich z.B. "Guten Tag" eingebe, dann sehe im im Debug Modus das in den String nur das Wort "Guten" aufgenommen wird.
Wie kann ich es so machen, das auch mehrere Wörter in den String (also durch Leerzeichen getrennt) aufgenommen werden?
2.
Gibt es eine funktion, die alle Zeichen in einem String in Kleinbuchstaben umwandelt?mFG
Damian
-
Wenn ich z.B. "Guten Tag" eingebe, dann sehe im im Debug Modus das in den String nur das Wort "Guten" aufgenommen wird.
Wie kann ich es so machen, das auch mehrere Wörter in den String (also durch Leerzeichen getrennt) aufgenommen werden?
... string Eingabe; getline (cin, Eingabe); do { ...
Gibt es eine funktion, die alle Zeichen in einem String in Kleinbuchstaben umwandelt?
Ne, da must du selber was basteln (basierend auf tolower(), welches ein einzelnes Zeichen in einen Kleinbuchstaben wandelt).
-
for (int i=0; i< signed (strlen (speicherchar)) ; i=i+1)
{
speicherchar[i]=toupper(speicherchar[i]); = ALLES GROSS
speicherchar[i]=tolower(speicherchar[i]); = alles klein
}
-
Gut vielen dank wieder
Super Forum!Das einzige was mich noch stört ist, dass 2 Zeilen eingelesen werden, anstatt einer. Ist das so normal?
D.h. ich gebe das Wort ein, drücke ENTER und muss noch einmal ENTER drücken, jedoch liest er die 2te Zeile nicht einmFG
DaMiNaToR@ tie123
Auch danke!
-
BTW, wir haben hier eine Suchfunktion. Damit hättest du schnell dieses Beispiel gefunden:
#include <algorithm> #include <cctype> #include <string> char myToUpper(char c) { return std::toupper(static_cast<unsigned char>(c)); } int main() { std::string s("Hallo"); std::transform(s.begin(), s.end(), s.begin(), myToUpper); }
-
Nur das mit den 2 Zeile. ist noch komisch. ≈
-
Du lässt das 'cin >> Eingabe;' jetzt aber weg, oder?
-
#include <iostream> #include <string> using namespace std; void main() { const int maxBegruessung = 3; char Begruessung[maxBegruessung][20] = { "Hallo" , "Guten Tag", "Hi"}; string Eingabe; int i; int t1; i = 0; t1=0; cout << endl << "Test Programm" << endl << endl; getline (cin, Eingabe); do { if(Eingabe == Begruessung[i]) { t1=1; break; } else t1=0; i++; } while(i<maxBegruessung); if (t1==1) cout << "Stimmt überein"; else cout << "Stimmt NICHT überein"; }
Das ist der Abschnitt, lässt sich kompilieren.
Könnt ihr mir sagen, ob bei euch auch 2 (!) Zeilen eingelesen werden?
-
MSVC++ 6.0 getline Method Patch
Acknowledgements:
This patch was originally brought to my attention by Dr. Mark Sebern.Instructions:
Users of the string getline method in MSVC++ 6.0 are aware that it has some errors. The most obvious problem is that you may often have to use the <Enter> key more than once for the following code. This is not correct.
string mystring;
getline(cin,mystring,'\n');To correct this problem the header file which defines the string class needs to be updated. This can simply be done by replacing line 165
which reads: _I.rdbuf()->snextc();
with the following: _I.rdbuf()->sbumpc(); // Dinkumware patch MSOEThe header file can be found at "..\Program Files\Microsoft Visual Studio\VC98\Include" (or equivalent).
-
BTW, void main ist nicht Standard. main muss int zurückgeben. (Ja, ich weiß, das der MSVC 6 das trotzdem zulässt.)
-
Jup, hätt nicht gedacht das der Compiler soar Bugs hatt
Danke!
-
Ich habe mir eben das neuste Service Pack 6 installiert, weil ich die die Stelle in der Datei (auch mit Suche nicht finden konnte).
Ich habe die String Header (String.h) Datei durchsucht, da war sie aber nicht.
Welche Datei ist gemeint?
mFG
DaMiNaToR
-
Hallo,
die Datei heisst nicht string.h sondern nur string
mfg
v R
-
Es tut mir leid, ich weis, das ich euch quäle
, naja aber mein Kenntnisse sind noch bescheidend, aber eines Tages werde ich hier anderen vielleicht auch helfen können
.
Habe eine Zeit lang überlegt
, aber der Compiler hatt immer etwas mit dieser "Konventierung".
Ich will die Buchstaben-Kleinermachen als Funktion schreiben, ich habe es jetzt so:
#include <iostream> #include <string> using namespace std; void main() { const int maxBegruessung = 3; char Begruessung[maxBegruessung][20] = { "Hallo" , "Guten Tag", "Hi"}; string Eingabe; int i; int t1; i = 0; t1=0; cout << endl << "Test Programm" << endl << endl; getline (cin, Eingabe); do { if(Eingabe == Begruessung[i]) { t1=1; break; } else t1=0; i++; } while(i<maxBegruessung); if (t1==1) { cout << "Stimmt überein"; } else { cout << "Stimmt NICHT überein"; } } string LowChars(string Eingabe) { for (int i=0; i< signed (strlen (Eingabe)) ; i=i+1) { //Eingabe[i]=toupper(Eingabe[i]); = ALLES GROSS Eingabe[i]=tolower(Eingabe[i]); } return Eingabe; }
Aber ich darf irgendwie nicht string verwenden, char will er auch nicht akzeptieren
HILFE
mFG
DaMiNaToR
-
ein paar tips
-schreibe int main, nicht void.
-mach ein lieber array aus strings
string begruessung[] = { "Foo", "Bar", "etc" }; //größe: sizeof(begruessung)/sizeof(*begruessung)
-verwende statt endl
const char nl = '\n'; cout << foo << nl; //statt deiens cout << endl << "Testprogramm" << endl << endl; //schreib also lieber cout << "\nTestprogramm\n\n";
wenn du nicht weißt, was endl bewirkt.
-definiere deine variablen nicht schon am anfang einer funktion, sondern exakt dann, wenn du sie brauchst.
-inkludiere cctype für tolower, sicher ist sicher.
oder inkludiere locale und verwendefoo[i] = tolower(foo[i], locale());
-strlen ist eine funktion, die nur auf zeiger auf const char arbeitet.
die entsprechende funktion für std::strings ist size bzw. length, und das sind memberfunktionenfor (unsigned i = 0; i < your_string.length(); ++i)
das jetzt einmal allgemein.
was jetzt noch auffällt ist, dass du eine funktion definierst, die du überhaupt gar nicht verwendest (nämlich LowChars).
-
Danke für die Tipps, habe sie jetzt alle beachtet!