删除字符串C ++末尾的标点符号

时间:2014-10-15 20:31:12

标签: c++

如何在字符串末尾删除特定类型的标点符号?我想删除" - " a.k.a.连字符。我只想在字符串的末尾删除它们。谢谢。

更新:用户Christophe为使用低于c ++ 11的用户提供了一个很好的解决方案! 代码如下:

for (int n=str.length(); n && str[--n]=='-'; str.resize(n));

4 个答案:

答案 0 :(得分:3)

尝试:

while (str.length() && str.back() == '-') 
    str.pop_back(); 

答案 1 :(得分:1)

Boost的解决方案值得一提:

std::string cat = "meow-";
boost::trim_right_if(cat,boost::is_any_of("-"));

demo

查看必不可少的boost string algo库。

答案 2 :(得分:0)

使用std::string的一些有用属性,即find_last_of()find_last_not_of()substr()length()

std::string DeHyphen(const std::string input){
    std::string dehyphened = input;
    if ((dehyphened.length() - 1) == dehyphened.find_last_of("-")) //If we have a hyphen in the last spot,
        return dehyphened.substr(0, dehyphened.find_last_not_of("-")); //Return the string ending in the last non-hyphen character.
    else return dehyphened; //Else return string.
}

请注意,这不适用于仅包含连字符的字符串 - 您只需返回字符串即可。如果您想在该实例中使用空字符串,只需在'if'计算为true的情况下检查它。

答案 3 :(得分:0)

std::string有一个find_last_not_of成员函数,可以很容易地找到正确的位置:

size_t p = your_string.find_last_not_of('-');

从那里开始,将内容从那里删除到字符串末尾是一件简单的事情:

your_string.erase(pos);

如果字符串末尾没有连字符,find_last_not_of将返回std::string::npos。我们在此处使用的erase的重载需要删除开始和结束位置的参数,但将结束点设置为std::string::npos作为默认值。将其称为your_string.erase(npos, npos)会使字符串保持不变,因此我们不需要任何特殊代码。由于擦除不需要是有条件的,因此您可以很容易地将两者结合起来:

your_string.erase(your_string.find_last_not_of('-'));