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é.
Pour une version non mutante:
st = myString.substr(0, myString.size()-1);
Solution simple si vous utilisez C++ 11. Probablement O(1) également:
st.pop_back();
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.
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
.
int main () {
string str1="123";
string str2 = str1.substr (0,str1.length()-1);
cout<<str2; // output: 12
return 0;
}
C'est tout ce dont vous avez besoin:
#include <string> //string::pop_back & string::empty
if (!st.empty())
st.pop_back();
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.
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
Si la longueur est non nulle, vous pouvez aussi
str[str.length() - 1] = '\0';