Как использовать вложенную функцию getline () для получения специальных символов и знаков препинания в строке?

Я использую функцию getline () для получения специальных символов и знаков препинания в предложении, чтобы при отображении слов, содержащихся в предложении, в нем не было никаких других символов, кроме a-z (или A-Z). Проблема в том, что он становится длинным, и я не думаю, что он действительно эффективен. Я хотел бы знать, смогу ли я сделать это эффективным способом. Я использую Dev-C ++, код ниже на C ++. Спасибо за вашу помощь.

#include <string>
#include <iostream>
#include <ctype.h>
#include <sstream>

using namespace std;int main()
{
int i=0;
char y;
string prose, word, word1, word2;
cout << "Enter a sentence: ";
getline(cin, prose);

string mot;
stringstream ss(prose);y=prose[i++];
if (y=' ')   // if character space is encoutered...cout<<endl << "list of words in the prose " << endl;
cout << "---------------------------"<<endl;
while(getline(ss, word, y))  //remove the space...
{

stringstream ss1(word);

while(getline(ss1, word1, ','))  //remove the comma...
{

stringstream ss2(word1);  //remove the period
while(getline(ss2, word2, '.'))
cout<< word2 <<endl; //and display just the word without space, comma or period.
}
}cout<<'\n';
system ("Pause");
return 0;
}

#############################выход

Введите предложение: что? Когда я говорю: «Николь, принеси мне мои тапочки и дай мне
y night-cap, «это проза?

список слов в прозе

Какие?
когда
я
сказать:
«Николь
приносить
мне
мой
домашние тапочки
а также
дать
мне
мой
ночной колпак
«является
тот
проза?

Нажмите любую клавишу для продолжения . , ,

0

Решение

использование std::remove_if():

std::string s(":;[{abcd 8239234");

s.erase(std::remove_if(s.begin(),
s.end(),
[](const char c) { return !isalpha(c); }),
s.end());

Если у вас нет компилятора C ++ 11, определите предикат вместо использования лямбда-выражения (онлайн-демонстрация) http://ideone.com/NvhKq).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]