gpt4 book ai didi

c++ - 从 C++ 字符串中删除不允许的字符的最优雅、最有效的方法?

转载 作者:太空狗 更新时间:2023-10-29 23:21:41 26 4
gpt4 key购买 nike

我正在使用 C++11,我想知道什么是最优雅的处理现有 C++ 字符串的方法,它只包含下面这些有效字符。效率也是一个问题,但首先要寻找优雅。

"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-";

谢谢,维吉尔。

最佳答案

这是我的出发点:

void removeDisallowed(std::string& in) {
static const std::string allowed = "01234...";
in.erase(
std::remove_if(in.begin(), in.end(), [&](const char c) {
return allowed.find(c) == std::string::npos;
}),
in.end());
}

如果你想让它更有效率,你可以做一个集合:

std::unordered_set<char> allowedSet(allowed.begin(), allowed.end());

并将支票更改为:

return !allowedSet.count(c);

[更新] 基于很多好的评论和答案,我建议只写一个:

template <typename F>
void erase_if(std::string& in, F func) {
in.erase(std::remove_if(in.begin(), in.end(), func));
}

然后实际尝试使用所有各种建议的 func 运行它,看看哪一个最适合您的用例。这不适用于 Dietmar 的回答,因此您必须单独尝试那个,但它们可能都值得一试。

关于c++ - 从 C++ 字符串中删除不允许的字符的最优雅、最有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26808537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com