Как удалить последний символ из строки С++?
Я пробовал st = substr(st.length()-1);
Но это не сработало.
Как удалить последний символ из строки С++?
Я пробовал st = substr(st.length()-1);
Но это не сработало.
Для не мутирующей версии:
st = myString.substr(0, myString.size()-1);
Простое решение, если вы используете С++ 11. Вероятно, O (1) время:
st.pop_back();
if (str.size () > 0) str.resize (str.size () - 1);
Альтернатива std:: erase хороша, но мне нравится "-1" (независимо от того, зависит ли это от размера или конечного итератора) - для меня это помогает выразить намерение.
BTW - действительно ли нет std::string:: pop_back? - Кажется странным.
buf.erase(buf.size() - 1);
Предполагается, что строка не пуста. Если это так, вы получите исключение out_of_range
.
str.erase( str.end()-1 )
Ссылка: std::string:: erase() прототип 2
не требуется С++ 11 или С++ 0x.
int main () {
string str1="123";
string str2 = str1.substr (0,str1.length()-1);
cout<<str2; // output: 12
return 0;
}
str.erase(str.begin() + str.size() - 1)
str.erase(str.rbegin())
не компилируется, к сожалению, поскольку reverse_iterator
не может быть преобразовано в normal_iterator.
С++ 11 - ваш друг в этом случае.
С С++ 11 вам даже не нужна длина/размер. Пока строка не пуста, вы можете сделать следующее:
if (!st.empty())
st.erase(std::prev(st.end())); // Erase element referred to by iterator one
// before the end
Что вам нужно:
#include <string> //string::pop_back & string::empty
if (!st.empty())
st.pop_back();
Столкнувшись с такой ситуацией и нашел такое решение:
CString str;
// working with this variable
if (!str.IsEmpty()) // or if(str.GetLength() > 0)
str.Delete(str.GetLength()-1);
Может быть, это будет полезно для кого-то.
Для С++ 11 вы можете использовать string:: back как,
std::string stringName ("milan#") ;
stringName.back() ='$';
std::cout<<stringName;
**Output:**
milan$