C++文字列から最後の文字を削除する方法
私はst = substr(st.length()-1);
を試しましたが、うまくいきませんでした。
非変更バージョンの場合:
st = myString.substr(0, myString.size()-1);
C++ 11を使用している場合は簡単な解決策。おそらくO(1) timeであろう:
st.pop_back();
if (str.size () > 0) str.resize (str.size () - 1);
Std :: eraseの代替方法は良いのですが、私は " - 1"(サイズに基づいているかエンドイテレータに基づいているかにかかわらず)が好きです - それは意図を表現するのを助けます。
ところで - 本当にstd :: string :: pop_backはありませんか? - 不思議だ。
buf.erase(buf.size() - 1);
これは、文字列が空ではないことを知っていることを前提としています。もしそうなら、あなたはout_of_range
例外を得るでしょう。
int main () {
string str1="123";
string str2 = str1.substr (0,str1.length()-1);
cout<<str2; // output: 12
return 0;
}
必要なものはこれだけです。
#include <string> //string::pop_back & string::empty
if (!st.empty())
st.pop_back();
str.erase(str.begin() + str.size() - 1)
reverse_iterator
はnormal_iteratorに変換できないので、str.erase(str.rbegin())
は残念ながらコンパイルされません。
この場合、C++ 11があなたの友人です。
C++ 11では、長さやサイズさえも必要ありません。文字列が空でない限り、次のことができます。
if (!st.empty())
st.erase(std::prev(st.end())); // Erase element referred to by iterator one
// before the end
長さがゼロ以外の場合は、
str[str.length() - 1] = '\0';