Как я могу удалить последний символ из строки C ++?
Я пытался st = substr(st.length()-1); Но это не сработало.
st = substr(st.length()-1);
Простое решение, если вы используете C ++ 11. Вероятно, O (1) время:
st.pop_back();
Для версии без мутаций:
st = myString.substr(0, myString.size()-1);
if (str.size () > 0) str.resize (str.size () - 1);
Альтернатива std :: erase хороша, но мне нравится "- 1" (на основе размера или конечного итератора) - мне это помогает выразить намерение.
Кстати - действительно ли нет std :: string :: pop_back? - кажется странным.
buf.erase(buf.size() - 1);
Предполагается, что вы знаете, что строка не пустая. Если это так, вы получите исключение out_of_range.
out_of_range
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; }
Это все, что вам нужно:
#include <string> //string::pop_back & string::empty if (!st.empty()) st.pop_back();
С C ++ 11 вам даже не нужны длина / размер.Пока строка не пуста, вы можете делать следующее:
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.
str.erase(str.rbegin())
reverse_iterator
C ++ 11 в этом случае ваш друг.*
Если длина не равна нулю, вы также можете
str[str.length() - 1] = '\0';