다음을 사용하고 있습니다.
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