Удалить последний символ из строки С++

Как удалить последний символ из строки С++?

Я пробовал st = substr(st.length()-1); Но это не сработало.

Ответ 1

Для не мутирующей версии:

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

Ответ 2

Простое решение, если вы используете С++ 11. Вероятно, O (1) время:

st.pop_back();

Ответ 3

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

Альтернатива std:: erase хороша, но мне нравится "-1" (независимо от того, зависит ли это от размера или конечного итератора) - для меня это помогает выразить намерение.

BTW - действительно ли нет std::string:: pop_back? - Кажется странным.

Ответ 4

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

Предполагается, что строка не пуста. Если это так, вы получите исключение out_of_range.

Ответ 6

int main () {

  string str1="123";
  string str2 = str1.substr (0,str1.length()-1);

  cout<<str2; // output: 12

  return 0;
}

Ответ 7

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

str.erase(str.rbegin()) не компилируется, к сожалению, поскольку reverse_iterator не может быть преобразовано в normal_iterator.

С++ 11 - ваш друг в этом случае.

Ответ 8

С С++ 11 вам даже не нужна длина/размер. Пока строка не пуста, вы можете сделать следующее:

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

Ответ 9

Что вам нужно:

#include <string>  //string::pop_back & string::empty

if (!st.empty())
    st.pop_back();

Ответ 10

Столкнувшись с такой ситуацией и нашел такое решение:

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

Может быть, это будет полезно для кого-то.

Ответ 11

Для С++ 11 вы можете использовать string:: back как,

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

**Output:**
milan$