programing

C++ 문자열에서 마지막 문자 제거

muds 2023. 4. 21. 21:34
반응형

C++ 문자열에서 마지막 문자 제거

C++ 문자열에서 마지막 문자를 삭제하려면 어떻게 해야 합니까?

나는 노력했다.st = substr(st.length()-1);하지만 그것은 작동하지 않았다.

C++11을 사용하고 있는 경우는, 심플한 해결 방법.아마도 O(1) 시간:

st.pop_back();

변형이 없는 버전의 경우:

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

이것으로 충분합니다.

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

if (!st.empty())
    st.pop_back();
if (str.size() > 0)  str.resize(str.size() - 1);

std::erase대안은 좋지만, 나는 그 방법이 좋다.- 1(사이즈나 엔드 아이테이터에 근거해) - 저는 그것이 의도를 표현하는 데 도움이 됩니다.

BTW - 정말 없어요?std::string::pop_back이상한데?

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

이 경우 문자열이 비어 있지 않은 것으로 간주됩니다.그렇다면, 당신은 그것을 얻을 수 있을 것이다.out_of_range예외.

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

참조: std::string::erase() 프로토타입 2

c++11 또는 c++0x는 필요 없습니다.

int main () {

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

  cout<<str2; // output: 12

  return 0;
}

C++11에서는 길이/사이즈도 필요 없습니다.문자열이 비어 있지 않으면 다음 작업을 수행할 수 있습니다.

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

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

str.erase(str.rbegin())유감스럽게도 컴파일은 되지 않습니다.reverse_iteratornormal_iterator로 변환할 수 없습니다.

이 경우 C++11이 당신의 친구입니다.

경계 검사 또는 3진 연산자가 있는 빈 문자열에 대해 걱정하지 마십시오.

str.erase(str.end() - ((str.length() > 0) ? 1 : 0), str.end());

#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;
}

길이가 0이 아닌 경우,

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

언급URL : https://stackoverflow.com/questions/2310939/remove-last-character-from-c-string

반응형