c++ - 检查字符串是否包含不仅仅是关键字 C++
问题描述
感谢您点击我的问题。
经过无数小时的搜索,我还没有找到解决方案,而且很难搜索到您不知道如何在搜索中正确表达的内容。请帮帮我,我将不胜感激。
字符串的数据如下:
std::string keyword 1 "Hello";
std::string keyword 2 "Ola";
std::string test = Keyword1+Keyword2+keyword2;
我试图以伪代码形式实现的示例:
if(test.contains(more then the 2 keywords))
我想确保字符串除了上面的关键字之外还有其他文本。
解决方案
您可以从数据中删除这些关键字的所有实例,然后查看剩下的内容。它不是非常有效,但对于合理大小的输入应该无关紧要。
bool contains_more_than(std::vector<std::string> const& keywords, std::string sample) {
for (std::string const& keyword: keywords) {
size_t pos;
while ((pos = sample.find(keyword)) != sample.npos) {
sample.replace(pos, keyword.size(), "");
}
}
return !sample.empty();
}
请注意,如果某个关键字是另一个关键字的子字符串,这可能会失败:
contains_more_than({"123", "12345"}, "12345")
返回真。
为避免这种情况,您可以首先按以下方式对关键字进行排序std::string::size
:
std::string(keywords.begin(), keywords.end(),
[](std::string const& s1, std::string const& s2) {
return s1.size() > s2.size();
});
现在:
contains_more_than({"12345", "123"}, "12345")
返回 False
推荐阅读
- docker - 在 docker 中构建 rust 项目会导致 Cargo 无法下载依赖项
- javascript - 如何从 href 属性获取宽度和高度
- php - PDO 没有将 MS Access DB 的输出发送到 php
- mongodb - MongoDB多组聚合
- php - AuthnetWebhook 包签名密钥验证
- json - 如何在 Sql server 中替换 JSON 对象中的完整对象
- javascript - 如何为 Canvas 上动态添加的形状添加动态标签?
- python - Python:如何在文件中每秒打印 datetime.datetime.now()?
- java - 如何将通话记录中的号码填充到 onClick 列表中?
- python - 在 Python 中调用 URL 时出错