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

时间:2014-01-07 12:36:31

标签: c++ regex string c++11 split

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

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

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

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

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

请让我知道如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

获取前四个字符:

std::string first4=str.substr(0, 4);

删除任何isspace和isalpha谓词(尽管我认为我误解了,这里,你的意思是指空间而不是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';

答案 1 :(得分: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;
}

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

答案 2 :(得分:0)

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

所以你可以写一个函数,如:

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