如何删除所有在c + +string中出现的字符

我正在使用以下内容:

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

但是这是编译错误。

基本上, replacereplace一个字符和''不是一个字符。 你正在寻找的是erase

看到这个问题 ,回答同样的问题。 在你的情况下:

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

或者使用boost如果这是你的select,如:

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

所有这些在参考 网站上都有详细logging。 但是如果你不知道这些function,你可以轻松地做这种事情:

 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]; 

algorithmstd::replace对给定序列上的每个元素起作用(所以它用不同的元素replace元素,并且不能用什么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() + 1, 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; } 

我就是这么做的

或者你可以像安东尼那样提到:

看到这个问题 ,回答同样的问题。 在你的情况下:

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

这段代码删除了重复的人物,也就是说,如果input是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; 

我猜std的方法:删除的作品,但它给与包含一些兼容性问题,所以我写了这个小函数:

 string removeCharsFromString(const string str, char* charsToRemove ) { char c[str.length()+1]; // + terminating char const char *p = str.c_str(); unsigned int z=0, size = str.length(); unsigned int x; bool rem=false; for(x=0; x<size; x++) { rem = false; for (unsigned int i = 0; charsToRemove[i] != 0; i++) { if (charsToRemove[i] == p[x]) { rem = true; break; } } if (rem == false) c[z++] = p[x]; } c[z] = '\0'; return string(c); } 

只是用作

myString = removeCharsFromString(myString,“abc \ r”);

它将删除给定char列表的所有发生。

循环在第一次匹配之后返回也可能会更高效,所以我们实际上做的比较less。

这是我如何做到的:

 std::string removeAll(std::string str, char c) { size_t offset = 0; size_t size = str.size(); size_t i = 0; while (i < size - offset) { if (str[i + offset] == c) { offset++; } if (offset != 0) { str[i] = str[i + offset]; } i++; } str.resize(size - offset); return str; } 

基本上每当我find一个给定的字符,我提前的偏移量,并将字符重定位到正确的索引。 我不知道这是正确还是有效的,我开始(再一次)在C + +,我会很感激任何input。

 #include <string> #include <algorithm> std::string str = "YourString"; char chars[] = {'Y', 'S'}; str.erase (std::remove(str.begin(), str.end(), chars[i]), str.end()); 

将大写Y和S去掉,留下“ourtring”。

注意remove是一个algorithm,需要包含头文件<algorithm>