从C ++string中删除最后一个字符

我怎样才能从C + +string中删除最后一个字符?

我试过st = substr(st.length()-1); 但它没有工作。

对于非变异版本:

 st = myString.substr(0, myString.size()-1); 

简单的解决scheme,如果你正在使用C + + 11。 也许O(1)时间:

 st.pop_back(); 
 if (str.size () > 0) str.resize (str.size () - 1); 

一个std :: erase替代是好的,但我喜欢“-1”(无论是基于大小还是结束迭代器) – 对我来说,它有助于expression意图。

BTW – 是否真的没有std :: string :: pop_back? – 看起来很奇怪

 buf.erase(buf.size() - 1); 

这假定你知道这个string不是空的。 如果是这样,你会得到一个out_of_rangeexception。

str.erase( str.end()-1 )

参考: std :: string :: erase()原型2

没有C ++ 11或C ++ 0x需要。

 int main () { string str1="123"; string str2 = str1.substr (0,str1.length()-1); cout<<str2; // output: 12 return 0; } 

用C ++ 11,你甚至不需要长度/大小。 只要string不为空,您可以执行以下操作:

 if (!st.empty()) st.erase(std::prev(st.end())); // Erase element referred to by iterator one // before the end 

str.erase(str.begin() + str.size() - 1)

str.erase(str.rbegin())不能不幸的编译,因为reverse_iterator不能转换为normal_iterator。

在这种情况下,C ++ 11是你的朋友。

面对同样的情况,发现了这样的解决办法

 CString str; // working with this variable if (!str.IsEmpty()) // or if(str.GetLength() > 0) str.Delete(str.GetLength()-1); 

也许这对某个人有用。

对于C ++ 11,你可以使用string :: back,

 std::string stringName ("milan#") ; stringName.back() ='$'; std::cout<<stringName; **Output:** milan$