Frage von gerlochi, 41

Leeren String ignorieren(C++)?

Hallo! Ich habe eine Frage zu meinem Programm, in dem ich einen String nach den Leerzeichen Splitte und diese Teile einem Vector hinzufüge. Es gibt dabei jedoch ein Problem: Wenn zwei Leerzeichen hintereinander stehen, dann wir das "Nichts" dazwischen dem Array hinzugefügt. Da ich später damjt aber noch arbeiten will, mus ich diese Leeren sachen löschen. Ich habe schon versucht mit einer If-Abfrage(arry[i] == "") es zu ignorieren, aber es wird nicht ignoriert....

Gibt es eine Möglichkeit dies zu löschen, also das Element komplett zu entfehrnen oder während der Benutzung in einer For-Schleife zu ignorieren?

MfG gerlochi.

Bin grad nochmal auf ne Idee gekommen: Es müsste doch klappen wenn ich dieses "Nichts" nochmal in einen anderen String abspeichere, also geziehlt hervorführe und dann diese beiden Sachen vergleiche, oder?

Antwort
von Orsovai, 25

Guck Dir mal die Methode cin.peek() an. Damit kannst Du eine Vorschau auf den Eingabestrom erzeugen. Wenn das Zeichen nach einem Leerzeichen ein Leerzeichen ist, pusht Du den Eingabestrom einfach nochmal eins weiter.

Die Methode mit alles in ein Array und das Array dann durchsuchen und dann die Leerzeichen löschen ist etwas umständlich und ineffizient.

Mehr dazu hier: http://www.cplusplus.com/reference/istream/istream/peek/

Kommentar von gerlochi ,

Danke, deine Natwort hab ich übernommen :)

Antwort
von Mikkey, 10

Nehme Dir so etwas als Beispiel:

http://www.codeproject.com/Articles/1114/STL-Split-String

Antwort
von JutenMorgen, 8

Verstehe ich das richtig, dass du einfach nur ALLE (Auch aufeinanderfolgende) Leerzeichen aus deinem Text entfernen möchtest und die einzelnen Wörter als Strings in einem Vektor speichern möchtest?

Falls ja is das doch easy:

string vector();
string string, placeholder = "";
bool lastCharSpace = false;
for (int i=0; i < string.length(); i++)
{
if (string.at(i) == " " && lastCharSpace == false)
{
lastCharSpace = true;
vector.push_back(placeholder);
placeholder.clear();
}
else if (string.at(i) != " ")
{
lastCharSpace = false;
placeholder.pushback(string.at(i));
}
}
if (placeholder.length > 0)
{
vector.push_back(placeholder);
placeholder.clear();
}

Ich hoffe, das ist was du meintest und auch dass es funzt, konnte des jetzt ned testen, weil ich im Urlaub bin.

Liebe Grüße, JutenMorgen!

Antwort
von NeoExacun, 16

Probier den Vergleich mal mit
strcmp(char *str1, char *str2)

Antwort
von TheBassHead, 4

Dein Vergleich ist falsch, um abzufragen ob ein String an einer bestimmten stelle ein Leerzeichen hat wäre sowas richtig:

if(str[i] == ' ') {

}

Hoffe das hilft dir weiter wenn du noch keine Lösung gefunden hast.

Antwort
von Hairgott, 8

Warte? Dein Problem ist es das es nichts zu dem Vektor hinzufügt? Meinst du mit nichts "null" oder '\0'?              
Außerdem ist wichtig zu wissen ob der Array ein String Array ist und was darin steht.          
Deine Variablen Benennung ist Grotten schlecht...genauso wie meine ^^

Kommentar von gerlochi ,

Gute Frage... ich weiß nicht was hinzugefügt wird, deshalb (als letztes in der Frage) versuche ich mal dies in einen anderen String zu speichern und es dann zu vergleichen (also das nichts mit nichts :D). Zu der Variablen Benennung, keine sorge, im Programm heißt es anders ;-). Bin aber trotzdem schlecht drinn :D!

Antwort
von Graphitiboy, 26

Mach das doch so, dass du, sollte der String "" (also leerzeichen oder nichts) sein dann schreibst z.B. "_" rein. Und alle array items mit "_" darin sollen ignoriert werden. Geht das vllt?

Edit: Aber mit 'ner For Schleife kannst du den Array[i] komplett durchlaufen und alle items wo Array[i] == "" oder " " usw. Array[i].Delete ?

Kommentar von gerlochi ,

Das was du zuletzt gezeigt hast mit dem Vergleichen von "", hab ich schon probiert, es geht nicht....

Keine passende Antwort gefunden?

Fragen Sie die Community