我对这个论坛和 c++ 很陌生。所以请原谅我的疑问/问题。我正在尝试阅读std::string
.我知道我可以使用at
或[int]
运算符访问元素。我有两个问题:
1)从字符串中删除或删除所有特殊字符(包括空格)
2)仅读取此字符串中的前4个字符或字母
对于 1),我正在检查std::erase
和std::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());
}