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