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

How to remove all punctuation marks from a sentence?

本文关键字:标点符号 句子 何删除 删除      更新时间:2023-10-16

我是C++新手,正在尝试解决初学者试图从句子中删除所有标点符号的问题。下面是我想出的代码。但是,当我输入"你好!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时,它只读取输入流中的第一个空格字符。

您可能希望改用std::getline(默认情况下,它将读取整行)。

尝试使用 getline() 函数。在此处阅读有关它的信息。

欢迎来到C++!阅读有关字符串流的信息,他们非常擅长操作字符串

正如其他人已经说过的,你使用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;
}