web-dev-qa-db-ja.com

C ++文字列から最後の文字を削除

C++文字列から最後の文字を削除する方法

私はst = substr(st.length()-1);を試しましたが、うまくいきませんでした。

186
skazhy

非変更バージョンの場合:

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

C++ 11を使用している場合は簡単な解決策。おそらくO(1) timeであろう:

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

Std :: eraseの代替方法は良いのですが、私は " - 1"(サイズに基づいているかエンドイテレータに基づいているかにかかわらず)が好きです - それは意図を表現するのを助けます。

ところで - 本当にstd :: string :: pop_backはありませんか? - 不思議だ。

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

これは、文字列が空ではないことを知っていることを前提としています。もしそうなら、あなたはout_of_range例外を得るでしょう。

19
RC.

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

参照: std :: string :: erase()プロトタイプ2

c ++ 11やc ++ 0xは不要です。

14
ribamar
int main () {

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

  cout<<str2; // output: 12

  return 0;
}
8
codaddict

必要なものはこれだけです。

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

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

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

reverse_iteratorはnormal_iteratorに変換できないので、str.erase(str.rbegin())は残念ながらコンパイルされません。

この場合、C++ 11があなたの友人です。

2
Zebra

C++ 11では、長さやサイズさえも必要ありません。文字列が空でない限り、次のことができます。

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

長さがゼロ以外の場合は、

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