如何在字符串末尾删除特定类型的标点符号?我想删除" - " a.k.a.连字符。我只想在字符串的末尾删除它们。谢谢。
更新:用户Christophe为使用低于c ++ 11的用户提供了一个很好的解决方案! 代码如下:
for (int n=str.length(); n && str[--n]=='-'; str.resize(n));
答案 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("-"));
查看必不可少的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('-'));