我对这个论坛和c ++很新。所以请原谅我的疑惑/问题。我正在尝试阅读std::string
。我知道我可以使用at
或[int]
运算符访问元素。我有两个问题:
1)删除或删除字符串中的所有特殊字符(包括空格)
2)只读取此字符串中的前4个字符或字母
对于1),我正在检查std::erase
和std::remove_if
但我需要消除所有我的意思是特殊字符和空格。这意味着我需要包含isspace()
/ isalpha()
等所有条件。有没有一种方法可以一次性删除所有方法?
对于2),我可以像数组一样访问字符串,我的意思是字符串[0],字符串[1],字符串[2],字符串[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."