C ++ 문자열에서 문자의 모든 발생을 제거하는 방법 (str1.begin(), str1.end(), ‘a’ ,

다음을 사용하고 있습니다.

replace (str1.begin(), str1.end(), 'a' , '')

그러나 이것은 컴파일 오류를 제공합니다.



답변

기본적으로 replace문자를 다른 문자로 대체하고 문자 ''가 아닙니다. 당신이 찾고있는 것은입니다 erase.

동일한 문제에 대한 답 이있는이 질문 을 참조하십시오 . 귀하의 경우 :

#include <algorithm>
str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());

또는 boost다음과 같은 옵션 인 경우 사용 하십시오.

#include <boost/algorithm/string.hpp>
boost::erase_all(str, "a");

이 모든 것은 참조 웹 사이트 에 잘 문서화되어 있습니다. 그러나 이러한 기능을 몰랐다면 이런 종류의 일을 손으로 쉽게 할 수 있습니다.

std::string output;
output.reserve(str.size()); // optional, avoids buffer reallocations in the loop
for(size_t i = 0; i < str.size(); ++i)
  if(str[i] != 'a') output += str[i];

답변

알고리즘 std::replace은 주어진 시퀀스에서 요소별로 작동 합니다 (따라서 요소를 다른 요소로 대체하고 아무것도 대체 할 수 없습니다 ). 그러나 문자 가 없습니다 . 당신이 시퀀스에서 요소를 제거 할 경우, 다음과 같은 요소가 될 필요가 이동 하고, std::replace이런 식으로 작동하지 않습니다.

이를 달성하기 위해 std::remove( 와 함께std::erase )를 사용할 수 있습니다 .

str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());

답변

사용 copy_if:

#include <string>
#include <iostream>
#include <algorithm>
int main() {
    std::string s1 = "a1a2b3c4a5";
    char s2[256];
    std::copy_if(s1.begin(), s1.end(), s2, [](char c){return c!='a';});
    std::cout << s2 << std::endl;
    return 0;
}

답변

string RemoveChar(string str, char c)
{
   string result;
   for (size_t i = 0; i < str.size(); i++)
   {
          char currentChar = str[i];
          if (currentChar != c)
              result += currentChar;
   }
       return result;
}

이것이 내가 한 방법입니다.

또는 Antoine이 언급 한대로 할 수 있습니다.

동일한 문제에 대한 답 이있는이 질문 을 참조하십시오 . 귀하의 경우 :

#include <algorithm>
str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());

답변

이 코드는 문자의 반복을 제거합니다. 즉, 입력이 aaabbcc이면 출력은 abc가됩니다.

cin >> s;
ans = "";
ans += s[0];
for(int i = 1;i < s.length();++i)
if(s[i] != s[i-1])
    ans += s[i];
cout << ans << endl;

답변

필터링 된 문자열을 채우기 위해 predicate비어 있지 않거나 비어 있지 않은 경우 다음을 output고려합니다.

output.reserve(str.size() + output.size());
std::copy_if(str.cbegin(),
             str.cend(),
             std::back_inserter(output),
             predicate});

원래 질문에서 술어는 [](char c){return c != 'a';}


답변

다른 답변을 기반으로 주어진 문자열에서 모든 특수 문자를 제거한 예제가 하나 더 있습니다.

#include <iostream>
#include <string>
#include <algorithm>

std::string chars(".,?!.:;_,!'\"-");

int main(int argc, char const *argv){

  std::string input("oi?");
  std::string output = eraseSpecialChars(input);

 return 0;
}




std::string eraseSpecialChars(std::string str){

std::string newStr;
    newStr.assign(str);

    for(int i = 0; i < str.length(); i++){
        for(int  j = 0; j < chars.length(); j++ ){
            if(str.at(i) == chars.at(j)){
                char c = str.at(i);
                newStr.erase(std::remove(newStr.begin(), newStr.end(), c), newStr.end());
            }
        }

    }

return newStr;
}

입력 대 출력 :

Input:ra,..pha
Output:rapha

Input:ovo,
Output:ovo

Input:a.vo
Output:avo

Input:oi?
Output:oi