Strings Satzzeichen entfernen
-
std::string new_string; for(int i = 0; i <= old_string.size(); i++) { if(old_string[i] != ",") { new_string += old_string[i]; } }
-
Danke
Jedoch bekomme ich beim compilieren jezt folgende Fehlermeldung:
"ISO C++ forbids comparison between pointer and integer"Hier mein Quelltext:
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s; cout << endl; getline(cin, s); string s2; for (string::size_type index = 0; index <= s.size(); ++index) { if (s[index] != ",") { s2 += s[index]; } else if (s[index] != ".") { s2 += s[index]; } else if (s[index] != ":") { s2 += s[index]; } else if (s[index] != ";") { s2 += s[index]; } else if (s[index] != "?") { s2 += s[index]; } else if (s[index] != "!") { s2 += s[index]; } } cout << s << endl; }
-
Einfachen Anführungsstrichen '' markieren ein Zeichen.
Doppelte Anführungszeichen "" markieren einen const char[].
Das sind zwei sehr sehr unterschiedliche Sachen.
-
Ups natürlich, du musst ":" mit ':' ersetzen.
Edit:
Ich würd dir aber das hier empfehlen, statt der ganzen if Verzweigungen:int main() { std::string vorzeichen = ",.:;?!"; std::string old_string = "H.a,l:l;o"; std::string new_string; bool found = false; for(int i = 0; i <= old_string.size(); i++) { for(int j = 0; j <= vorzeichen.size(); j++) { if(old_string[i] == vorzeichen[j]) { found = true; break; } } if(!found) { new_string += old_string[i]; } found = false; } std::cout << new_string; }
-
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s; cout << endl; getline(cin, s); string s2; for (string::size_type index = 0; index <= s.size(); ++index) { if (s[index] != ',') { s2 += s[index]; } else if (s[index] != '.') { s2 += s[index]; } else if (s[index] != ':') { s2 += s[index]; } else if (s[index] != ';') { s2 += s[index]; } else if (s[index] != '?') { s2 += s[index]; } else if (s[index] != '!') { s2 += s[index]; } } cout << s << endl; }
Jetzt ist das Programm ausführbar, jedoch gibt er die Satzzeichen trotzdem mit aus...
-
Du gibst ja auch den alten string aus und nicht den Neuen...
-
OK dummer fehler...
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s; cout << endl; getline(cin, s); string s2; for (string::size_type index = 0; index <= s.size(); ++index) { if (s[index] != ',') { s2 += s[index]; } else if (s[index] != '.') { s2 += s[index]; } else if (s[index] != ':') { s2 += s[index]; } else if (s[index] != ';') { s2 += s[index]; } else if (s[index] != '?') { s2 += s[index]; } else if (s[index] != '!') { s2 += s[index]; } } cout << s2 << endl; }
Aber jetzt gibt er immer noch das gleiche aus, was man eingibt... mit Satzzeichen.
Und bei der zweiten Variante noch schlimmer:
#include <iostream> #include <string> using namespace std; int main() { string s1; getline(cin, s); string s2 = ",.;:?!"; string s3; for (string::size_type ix = 0; ix <= s1.size(); ++ix) { for (string::size_type in = 0; in <= s2.size(); ++in) { if (s1[ix] != s2[in]) { s3 += s1; } } cout << s3 << endl; } }
Hier gibt er als Ausgabe ca. 20 mal das gleiche aus wie bei der Eingabe, dirket hintereinander...
Jezt bin ich verwirrt
-
Ok, mal schauen bei deiner if-Orgie:
Das aktuelle Satzzeichen ist ein':'
. Dann wird überprüft, ob es ungleich einem','
ist. Das ist wahr, also wird das Zeichen angefügt ... :pGrüssli
-
mrco17 schrieb:
#include <iostream> #include <string> using namespace std; int main() { string s1; getline(cin, s); string s2 = ",.;:?!"; string s3; for (string::size_type ix = 0; ix <= s1.size(); ++ix) { for (string::size_type in = 0; in <= s2.size(); ++in) { if (s1[ix] != s2[in]) { s3 += s1; } } cout << s3 << endl; } }
Hier gibt er als Ausgabe ca. 20 mal das gleiche aus wie bei der Eingabe, dirket hintereinander...
Ja ich weiß, ich bin heute auch nicht ganz bei der Sache. Ich hab es aber schon editiert, guck es dir nochmal an. Funktioniert jetzt definitiv
-
Das mit found und break hatte ich noch nicht...
Aber trotzdem danke
-
@Dravere
Ok.. wie kann ich das beheben? Eigentlich nur mit der Methode von Freaky oder?
-
Da muss es doch eine Simple Lösung geben
Denn so viel habe ich ja noch nicht gelernt...
Zur Hilfe: Der momentane Abschnitt hat sich mit <cctype> beschäftigt. Das heißt Funktionen wie: isdigit, isalnum,...
Mein erster Ansatz war ja auch mit ispunct um die Satzzeichen zu finden, nur leider wusste ich nicht wie man sie dann entfernt
Aber ich vermute, dass es da eine ganz einfache Lösung gibt..
-
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s, s2; cin >> s; for (string::size_type index = 0; index != s.size(); ++index) { if (!ispunct(s[index]) s2 += s[index]; } cout << s2 << endl; }
-
Klammer beim if vergessen.
-
#include <string> #include <algorithm> #include <cctype> #include <iostream> int main(int, char*[]){ std::string test = "xcvb uzxcuvibxcvb.- sdf.s ,sdfs.fsd fsdf.sdf:;sdfsdf"; test.erase(remove_if(test.begin(), test.end(), static_cast<int(*)(int)>(std::ispunct)), test.end()); std::cout << test << std::endl; }
-
Danke Bruder Lustig
Meins sieht jezt so aus:#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s1; getline(cin, s1); string s2; for (string::size_type ix = 0; ix <= s1.size(); ++ix) { if (!ispunct(s1[ix])) { s2 += s1; } } cout << s2 << endl; }
Wenn ich das Programm ausführe, wird die Eingabe mit Satzzeichen ausgegeben: Allerdings 10mal hintereinander -.-
-
ix <= s1.size(); ist falsch. <= geht einen zu weit, nimm <
-
Desweiteren s2 += s1; durch s2 += s1[ix]; ersetzen.
-
ok, wenn ich < s.size mache, dann wird doch der letzte buchstabe nicht mit einbezogen oder?
-
jezt klappt es... <= habe ich aber immer noch.