如何从句子中删除所有标点符号?

时间:2016-02-04 23:39:43

标签: c++ cin

我是C ++的新手,正试图解决初学者试图从句子中删除所有标点符号的问题。以下是我提出的代码。但是,当我输入“Hello!Hello!”时,编译器输出“Hello”而不是“Hello Hello”(这是我期望的)。

为什么会这样?

#include <iostream>
#include <string>
using namespace std;

int main(){

    cout << "please enter a sentence which include one or more punctuation marks" << endl;    
    string userInput;
    string result;
    cin >> userInput;
    decltype(userInput.size()) n;
    for (n = 0; n < userInput.size(); n++){
        if(!ispunct(userInput[n])){
            result += userInput[n];
            cout << result << endl;
        }
    }
    return 0;
}

输入:

Hello! Hello!

编译器输出:

Hello

3 个答案:

答案 0 :(得分:4)

执行cin >> userInput时,它只会读取输入流中的第一个空格字符。

您可能希望使用std::getline代替(默认情况下会读取整行)。

答案 1 :(得分:1)

尝试使用function pageLoad() { $("#<%= tbTime.ClientID %>").datetimepicker({ format: 'LT' }); } 功能。阅读它here

欢迎使用C ++!阅读stringstreams他们非常擅长操纵字符串

答案 2 :(得分:1)

正如其他人已经说过的那样,您使用getline来阅读整行文字。

我还想指出<algorithm>中的某些功能可以使这种事情变得更加清晰。您可以使用std::remove_if

,而不是在字符串上循环
#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string line;
    while( std::getline( std::cin, line ) )
    {
        line.erase( std::remove_if( line.begin(), line.end(), ispunct ), line.end() );
        std::cout << line << std::endl;
    }
    return 0;
}