Lets sagen, dass ich etwas als solche haben:Der beste Weg, um die Wörter und das Apostroph nur in einer Zeichenkette zu behalten?
string s;
cout << "Enter a word:";
cin >> s;
//clean s
print(s);
Wenn jemand so etwas wie --sorry
oder what,
betritt, möchte ich vor dem ‚sauberen‘ die Zeichenfolge, um es in die Funktion übergeben, die das Wort ausdruckt. Eine Schnur zu säubern macht es ein Wort. In diesem Fall würde ein Wort wie alle aufeinander folgende Zeichenfolge aus Buchstaben definiert werden (können Sie auch Apostrophe dort sein, zum Beispiel don't
ist ein Wort, also von irgendetwas anderes in es loszuwerden
Ich war so etwas wie dies zu denken..
.string s;
cout << "Enter a word:";
cin >> s;
//clean s
string s2;
for (int i = 0; i < s.length(); i++)
if(isalpha(s[i]) || s[i] = "'")
s2[i] = s[i];
print(s2);
Aber das macht mein Programm nicht funktioniert, so dass ich einen anderen Weg, um herauszufinden, müssen dies zu tun,
Danke
bearbeiten:
string s;
cout << "Enter a word:";
cin >> s;
//clean s
s.erase(remove_if(s.begin(), s.end(), [](char c) {return !isalpha(c) ||
c == '\'' || c == '\-' || c == ','; }));
print(s);
Edit (spätestens):
s.erase(
std::remove_if(s.begin(), s.end(), [](char c) { return ???; }),
s.end()
);
Füllen Sie das ???
mit dem entsprechenden Filter für Zeichen, die Sie loswerden wollen:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string s;
cout << "Enter a word:";
cin >> s;
//clean s
s.erase(remove_if(s.begin(), s.end(), [](char c)
{
return !isalpha(c) || c == '\'' || c == '-' || c == ',' || c == ';' || c == ':';
}));
cout << s;
}
Sie Zugriff 's2' Reichweite heraus ... und Sie sollten 2-Indizes haben – bolov
Ist C++ 11 und [' regex_replace'] (http://en.cppreference.com/w/cpp/regex/regex_replace) eine Option? – tadman
Sie können das lokale festlegen, um alles außer Zeichen und Apostrophen als Leerzeichen zu behandeln (daher werden sie beim Lesen mit 'operator >>' ignoriert). http://StackOverflow.com/A/6154217/14065 –