web-dev-qa-db-fra.com

Supprimer le dernier caractère de la chaîne C++

Comment puis-je supprimer le dernier caractère d'une chaîne C++?

J'ai essayé st = substr(st.length()-1); Mais cela n'a pas fonctionné.

179
skazhy

Pour une version non mutante:

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

Solution simple si vous utilisez C++ 11. Probablement O(1) également:

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

Une alternative std :: erase est bonne, mais j'aime bien le "- 1" (qu'il soit basé sur une taille ou sur un itérateur final) - pour moi, cela aide à exprimer l'intention.

BTW - Y at-il vraiment pas de std :: string :: pop_back? - semble étrange.

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

Cela suppose que vous sachiez que la chaîne n'est pas vide. Si tel est le cas, vous obtiendrez une exception out_of_range.

19
RC.
int main () {

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

  cout<<str2; // output: 12

  return 0;
}
8
codaddict

C'est tout ce dont vous avez besoin:

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

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

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

str.erase(str.rbegin()) ne compile malheureusement pas, puisque reverse_iterator ne peut pas être converti en un normal_iterator.

C++ 11 est votre ami dans ce cas.

2
Zebra

Avec C++ 11, vous n'avez même pas besoin de la longueur/taille. Tant que la chaîne n'est pas vide, vous pouvez effectuer les opérations suivantes:

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

Si la longueur est non nulle, vous pouvez aussi

str[str.length() - 1] = '\0';
0
Jan Glaser