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

How to remove all punctuation marks from a sentence?

我是 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

当您执行 cin >> userInput 时,它只会读取输入流中的第一个白色 space 字符。

您可能想改用 std::getline(默认情况下它会读取整行)。

尝试使用 getline() 函数。了解它 here

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

正如其他人所说,您使用 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;
}