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



我对这个论坛和 c++ 很陌生。所以请原谅我的疑问/问题。我正在尝试阅读std::string.我知道我可以使用at[int]运算符访问元素。我有两个问题:

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

2)仅读取此字符串中的前4个字符或字母

对于 1),我正在检查std::erasestd::remove_if,但我也需要消除所有我的意思是特殊字符和空格。这意味着我需要包括isspace()/isalpha()等的所有条件。没有一种方法可以一次全部删除吗?

对于 2),我可以像数组一样访问字符串,我的意思是字符串[0]、字符串 [1]、字符串 [2]、字符串 [3]。但是我不能将其添加到单个字符串中吗?

请让我知道我该如何实现这一点?

获取前四个字符:

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

要删除所有特殊字符,为什么不制作这样的方法:

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

然后只是通过字符串迭代并删除不合法的字符?

对于 1:std::remove_if 将删除给定谓词返回 true 的所有元素。你提供了谓词函数对象,它可以是你想要的任何内容,只要它从容器(char)中获取一个元素并返回一个布尔值。

因此,您可以编写如下函数:

bool IsNotLegal(const char & stringElement);

或者,您可以将其编写为 lambda 函数,然后将其传递给 std::remove_if 以从字符串中删除满足 1 次条件的所有内容。

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."

旧东西,但这是我的解决方案。

  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());
}

最新更新