从std::string读取,删除所有特殊字符

7

我是一个新手,对这个论坛和C++都不太熟悉,如果我的问题显得有些幼稚,请见谅。我正在尝试读取一个std::string,我知道可以用at[int]运算符访问元素。我的问题如下:

1)从字符串中删除或清除所有特殊字符(包括空格)。

2)只读取此字符串的前4个字符或字母。

对于第一个问题,我查看了std::erasestd::remove_if,但我需要消除所有特殊字符以及空格。这意味着我需要包括所有isspace()isalpha()等条件。难道没有一种单独的方法可以一次性去除所有特殊字符吗?

对于第二个问题,我可以像使用数组一样访问字符串,即string[0]、string[1]、string[2]、string[3]。但我不能将它们添加到单个字符串中,请问该如何实现?

请告诉我怎样实现上述操作。


哪些字符是“特殊字符”? - zch
是的,我指的是我们键盘第二排上的所有按键。 - johnkeere
4个回答

9
要获取前四个字符:
std::string first4=str.substr(0, 4);

要删除任何 isspace 和 isalpha 谓词(尽管我认为我可能误解了,这里,您是指 isspace 而不是 isalpha 吗?):

str.erase(std::remove_if(str.begin(), str.end(),
    [](char c) { return std::isspace(c) || std::isalpha(c); } ),
    str.end());

您可以使用 op+= 将字符串附加到字符串末尾。例如:
str+="hello";
str+='c';

0

虽然这是老问题,但这是我的解决方案。

  void ClearSpecialCharacters(std::string &strText, const std::string& strAllowed)
{
    const std::string cAllowed = strAllowed; //"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890,.-";
    
    
    auto new_end = std::remove_if(strText.begin(), strText.end(),
                                  [cAllowed](std::string::value_type c)
                                  { return cAllowed.find(c) == std::string::npos; });
    
    
    
    strText.erase(new_end, strText.end());
}

0
为了删除所有特殊字符,为什么不像这样创建一个方法:
bool isLegal(char c)
{
  char legal[] = {'a', 'A', 'b','B' /*..and so on*/};
  int len = sizeof(legal)/sizeof(char);

  for (int i = 0; i < len; i++)
    if (c == legal[i])
      return true;
  return false;
}

然后只需迭代字符串并删除非法字符即可吗?


0

对于1:std::remove_if将删除所有满足给定谓词返回true的元素。您提供谓词函数对象,只要它接受来自容器(char)的元素并返回bool,它可以是任何您想要的。

因此,您可以编写一个函数,例如:

bool IsNotLegal(const char & stringElement);

或者你可以将它写成一个lambda函数,然后将其传递给std::remove_if,在一次遍历中删除满足条件的字符串。

std::string myString{"This is my string."};
std::remove_if(std::begin(myString), std::end(myString),[](const char & element)
{
    return std::isspace(element) && //any other conditions such as your own IsSpecial();
});
// now myString has become "Thisismystring."

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接