C++ 从字符串中删除标点符号

C++ 从字符串中删除标点符号,c++,c++11,C++,C++11,书号3.2.3中有一个练习要求: 编写一个程序,读取包含标点符号的字符串,并写入已读取但标点符号已删除的内容 我试图解决它,但出现了一个错误: #include <iostream> #include <string> using namespace std; int main() { string s; cin >> "Enter a sentence :" >> s >> endl; for (auto c

书号3.2.3中有一个练习要求:

编写一个程序,读取包含标点符号的字符串,并写入已读取但标点符号已删除的内容

我试图解决它,但出现了一个错误:

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

int main()
{
    string s;
    cin >> "Enter a sentence :" >> s >> endl;
    for (auto c : s)
         if (ispunct(c))
            remove punct;
        cout << s << endl;


    }
如果需要,请看一下remove_

另一个问题是,将punct作为语句删除对编译器没有任何意义。这是一个语法错误。由于要打印不带标点的字符串,因此仅在ispunt返回false时打印:

for (auto c : s)
{
    if (!ispunct(c)) {
        cout << c;
    }
}

还要记住使用大括号以避免歧义。

。。。错误到底是什么?应该在if和for语句周围使用大括号,以避免歧义。此外,删除点也没有意义。正如您所看到的,问题不需要您存储结果。你一个接一个地遍历每个字符,如果不是标点符号,为什么不一个接一个地写每个字符呢?我不认为——著名的最后一句话。如果有人让你写一个文字处理器……你认为传统的编译器会像用户输入{处理文字;}那样理解程序吗?也许像谷歌和Siri这样的软件给你的印象是,你只需编写删除点刺;或者删除点号(如果是句点或逗号);。但是在if后面加括号并不能神奇地让你写出任何你想写的东西作为条件,在文本行的末尾加分号也不能让它成为代码。语言有规则。这本书是用来学习它们的!我喜欢这个想法,但是当我尝试使用它时,我遇到了一个编译器错误。错误:没有匹配的函数用于调用“remove_if”…@Trenin,您使用的编译器是什么?g++gcc版本6.3.0 20170406 Ubuntu 6.3.0-12ubuntu2@Trenin是否尝试将ispunct更改为::ispunct?
int main()
{
    string s;
    cin >> "Enter a sentence : " >> s >> endl;
    for (auto c : s)
        if (ispunct(c))
            remove punct;
    cout << s << endl;
}
cout << "Enter a sentence : ";
cin >> s;
cout << endl;
for (auto c : s)
{
    if (!ispunct(c)) {
        cout << c;
    }
}