从C ++字符串中删除最后一个字符

时间:2010-02-22 12:56:35

标签: c++ string substring

如何从C ++字符串中删除最后一个字符?

我尝试了st = substr(st.length()-1);但它没有用。

11 个答案:

答案 0 :(得分:334)

如果您使用的是C ++ 11的简单解决方案。也可能是O(1)时间:

st.pop_back();

答案 1 :(得分:170)

对于非变异版本:

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

答案 2 :(得分:23)

if (str.size () > 0)  str.resize (str.size () - 1);

std :: erase替代方案很好,但我喜欢“ - 1”(无论是基于大小还是结束迭代器) - 对我而言,它有助于表达意图。

BTW - 真的没有std :: string :: pop_back吗? - 看起来很奇怪。

答案 3 :(得分:19)

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

这假设您知道该字符串不为空。如果是这样,您将获得out_of_range例外。

答案 4 :(得分:13)

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

参考:std::string::erase() prototype 2

不需要c ++ 11或c ++ 0x。

答案 5 :(得分:8)

int main () {

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

  cout<<str2; // output: 12

  return 0;
}

答案 6 :(得分:5)

这就是你所需要的:

  function initClient() {
    gapi.client.init({
      apiKey: API_KEY,
      clientId: CLIENT_ID,
      discoveryDocs: DISCOVERY_DOCS,
      scope: SCOPES,
      ux_mode: 'redirect',
      //redirect_uri: custom url to redirect'
    }).then(function () {
      // Listen for sign-in state changes.
      gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

      // Handle the initial sign-in state.
      updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
      authorizeButton.onclick = handleAuthClick;
      signoutButton.onclick = handleSignoutClick;
    });
  }

答案 7 :(得分:2)

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

不幸的是,

str.erase(str.rbegin())无法编译,因为reverse_iterator无法转换为normal_iterator。

在这种情况下,

C ++ 11是你的朋友。

答案 8 :(得分:2)

使用C ++ 11,您甚至不需要长度/大小。只要字符串不为空,您就可以执行以下操作:

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

答案 9 :(得分:0)

#include<iostream>
using namespace std;
int main(){
  string s = "Hello";// Here string length is 5 initially
  s[s.length()-1] = '\0'; //  marking the last char to be null character
  s = &s[0]; // using ampersand infront of the string with index will render a string from the index until null character discovered
  cout<<"the new length of the string "<<s + " is " <<s.length();
  return 0;
}

答案 10 :(得分:-1)

如果长度不为零,您也可以

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