ispunct()不删除字符串中间的逗号

时间:2011-10-18 02:06:44

标签: c++ string formatting ifstream

我有一个包含以下内容的字符串:

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.

我有以下代码可以删除所有标点符号的字符串。测试变量是我的字符串:

 if(std::ispunct(test[test.length()-1]))
    {
        test.erase(test.length()-1, 1);
    }

但是当我在这个函数之后再次输出这个字符串时,我有以下内容:

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity

由于某种原因,ispunct函数能够删除句点而不是逗号。为什么它以这种方式表现?提前谢谢。

2 个答案:

答案 0 :(得分:4)

您好像在寻找remove_if algorithm(以及ispunct predicate)。

N.B:

  

调用remove后,通常会调用容器的erase方法,该方法会删除未指定的值并减少容器的物理大小以匹配其容器新的逻辑大小。

#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>

int main()
{
    std::string dmr = "UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.";
    auto last = std::remove_if(dmr.begin(), dmr.end(), ispunct);
    dmr.erase(last, dmr.end());
    std::cout << dmr << std::endl;
}

See it run!

答案 1 :(得分:3)

嗯,你只是为test[test.length()-1](字符串中的最后一个字符)执行此操作。那里没有逗号,只是句号。