c++ - 在 C++ 中,如何从字符串中删除某些字符?

  显示原文与译文双语对照的内容
65 5

例如我有一个用户输入电话号码。

cout <<"Enter phone number:";
INPUT: (555) 555-5555
cin>> phone;

我想从字符串中删除"("。") 和"-"字符。我查看了字符串删除。查找和替换功能,但是我只看到它们是基于位置操作的。

是否可以以使用字符串函数来传递字符"(",例如,使它移除字符串中的所有实例?

时间:原作者:0个回答

60 0
 string str("(555) 555-5555");
 char chars[] ="()-";
 for (unsigned int i = 0; i <strlen(chars); ++i)
 {
//you need include <algorithm> to use general algorithms like std::remove()
 str.erase (std::remove(str.begin(), str.end(), chars[i]), str.end());
 }
//output: 555 5555555
 cout <<str <<endl;

要用作函数:

void removeCharsFromString( string &str, char* charsToRemove ) {
 for ( unsigned int i = 0; i <strlen(charsToRemove); ++i ) {
 str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
 }
}
//example of usage:
removeCharsFromString( str,"()-" );
原作者:
130 1

我想从字符串中删除"("。") 和"-"字符。

你可以使用 std::remove_if() 算法只删除指定的字符:

#include <iostream>
#include <algorithm>
#include <string>
bool IsParenthesesOrDash(char c)
{
 switch(c)
 {
 case '(':
 case ')':
 case '-':
 return true;
 default:
 return false;
 }
}
int main()
{
 std::string str("(555) 555-5555");
 str.erase(std::remove_if(str.begin(), str.end(), &IsParenthesesOrDash), str.end());
 std::cout <<str <<std::endl;//Expected output: 555 5555555
}

std::remove_if() 算法需要一个叫做谓词的东西,它可以是一个函数指针,就像上面的代码 Fragment 。

你还可以传递一个函数对象 ( 重载函数调用 () 运算符的对象) 。这样我们就可以创建更通用的解决方案:

#include <iostream>
#include <algorithm>
#include <string>
class IsChars
{
public:
 IsChars(const char* charsToRemove) : chars(charsToRemove) {};
 bool operator()(char c)
 {
 for(const char* testChar = chars; *testChar!= 0; ++testChar)
 {
 if(*testChar == c) { return true; }
 }
 return false;
 }
private:
 const char* chars;
};
int main()
{
 std::string str("(555) 555-5555");
 str.erase(std::remove_if(str.begin(), str.end(), IsChars("()-")), str.end());
 std::cout <<str <<std::endl;//Expected output: 5555555555
}

你可以使用 "()-" 字符串指定要删除的字符。在上面的例子中我添加了一个空格,以便删除空格和圆括号和破折号。

原作者:
...