使用string :: find_first_not_of和string :: find_last_not_of的问题

时间:2011-07-20 00:17:04

标签: c++ string stl erase

我知道这个问题很多,但我找不到一条对我有用的代码。

我试图使用字符串库中的find_first_not_of和find_last_not_of方法从传入的字符串中删除所有标点符号:

//
//strip punctuation characters from string
//
void stripPunctuation(string &temp)
{
    string alpha = "abcdefghijklmnopqrstuvwxyz";

    size_t bFound = temp.find_first_not_of(alpha); 
    size_t eFound = temp.find_last_not_of(alpha);

    if(bFound != string::npos)
        temp.erase(temp.begin());
    if(eFound != string::npos)
        temp.erase(temp.end());
}

基本上,我想删除字符串前面的任何不是字母的东西以及字符串末尾的任何非字母的东西。调用此函数时,会导致分段错误。我不确定我应该在哪里通过bFound和eFound?

1 个答案:

答案 0 :(得分:1)

永远不要传递.end()。它指向一个无效的迭代器,它代表结束。 如果要删除字符串中的最后一个字符,请使用temp.erase(temp.length() - 1)。 如果我理解正确的话。

编辑:

  

似乎erase()只接受迭代器,这是我最初的想法。

事实并非如此:

string& erase ( size_t pos = 0, size_t n = npos );
iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );

http://www.cplusplus.com/reference/string/string/erase/