it-swarm.com.de

Entfernen Sie das letzte Zeichen aus der C++ - Zeichenfolge

Wie kann ich das letzte Zeichen aus einer C++ - Zeichenfolge entfernen?

Ich habe versucht st = substr(st.length()-1); Aber es hat nicht funktioniert.

179
skazhy

Für eine nicht mutierende Version:

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

Einfache Lösung, wenn Sie C++ 11 verwenden. Wahrscheinlich auch O(1) Zeit:

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

Eine std :: erase-Alternative ist gut, aber ich mag die "- 1" (ob basierend auf einer Größe oder einem End-Iterator) - mir hilft es, die Absicht auszudrücken.

BTW - Gibt es wirklich kein std :: string :: pop_back? - erscheint merkwürdig.

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

Dies setzt voraus, dass Sie wissen, dass die Zeichenfolge nicht leer ist. In diesem Fall erhalten Sie eine out_of_range-Ausnahme.

19
RC.

str.erase( str.end()-1 )

Referenz: std :: string :: erase () Prototyp 2

kein c ++ 11 oder c ++ 0x benötigt.

14
ribamar
int main () {

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

  cout<<str2; // output: 12

  return 0;
}
8
codaddict

Das ist alles was Sie brauchen:

#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()) wird leider nicht kompiliert, da reverse_iterator nicht in einen normalen_iterator konvertiert werden kann.

C++ 11 ist in diesem Fall Ihr Freund.

2
Zebra

Mit C++ 11 benötigen Sie nicht einmal die Länge/Größe. Solange die Zeichenfolge nicht leer ist, können Sie Folgendes tun:

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

Wenn die Länge nicht Null ist, können Sie auch

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