如何在字符串中搜索多个子字符串

2023-12-14

我需要检查一个短字符串是否与子字符串列表匹配。目前,我这样做如下所示(ideone 上的工作代码)

bool ContainsMyWords(const std::wstring& input)
{
    if (std::wstring::npos != input.find(L"white"))
        return true;
    if (std::wstring::npos != input.find(L"black"))
        return true;
    if (std::wstring::npos != input.find(L"green"))
        return true;
    // ...
    return false;
}


int main() {
  std::wstring input1 = L"any text goes here";
  std::wstring input2 = L"any text goes here black";

  std::cout << "input1 " << ContainsMyWords(input1) << std::endl;
  std::cout << "input2 " << ContainsMyWords(input2) << std::endl;
  return 0;
}

我有 10-20 个子字符串需要与输入进行匹配。我的目标是优化代码以提高 CPU 利用率并降低平均情况下的时间复杂度。我以 10 Hz 的速率接收输入字符串,突发频率为 10 kHz(这是我担心的)。

agrep带有用 C 编写的源代码的库,我想知道 C++ 中是否有等效的标准。快速浏览一下,将其与我所拥有的集成起来可能有点困难(但可行)。

有没有更好的方法将输入字符串与 C++ 中的一组预定义子字符串进行匹配?


最好的办法是使用正则表达式搜索,如果您使用以下正则表达式:

"(white)|(black)|(green)"

这样,只需对字符串进行一次传递,如果找到匹配项,您将进入第 1 组"white"子字符串(以及开始点和结束点),如果匹配,则位于组 2 中"black"子字符串(以及开始点和结束点),如果匹配则位于组 3 中"green"子串。当您从第 0 组获得匹配结束的位置时,您可以开始新的搜索以查找更多匹配项,并且所有内容都将一次性传递到字符串!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在字符串中搜索多个子字符串 的相关文章

随机推荐

  • 使用 Apache Solr 3.6.1 存储阿拉伯语单词

    对于阿拉伯语搜索和索引已配置以下内容 架构 xml
  • 错误 1698 (28000):用户“root”@“localhost”的访问被拒绝

    我正在设置一个新服务器并不断遇到这个问题 当我尝试使用 root 用户登录 MySQL 数据库时 出现错误 错误 1698 28000 用户 root localhost 的访问被拒绝 如果我通过终端 SSH 连接 通过php我的管理员或
  • 在 S3 对象上设置 mime-type

    有没有办法让 S3 根据扩展名自动设置 mime 类型 如果我不指定 mime 类型而是让浏览器决定 我不希望我的上传强制下载 S3 不会为您执行此操作 但大多数工具和 API 将允许您在上传时指定 MIME 类型 根据您所使用的上下文 您
  • 在 .NET 中,是否有一种常见的做法可以更轻松地释放垃圾收集器的内存?

    我一直在想是否有一种方法可以加快 NET 中内存的释放速度 我正在 NET 仅托管代码 中创建一个游戏 不需要重要的图形 但我仍然想正确编写它 以免白白损失性能 例如 将 null 值分配给不再需要的对象是否有用 我在互联网上的一些示例中看
  • 使用 Java 查找文件夹中的文件

    如果搜索文件夹说我需要做什么C example 然后 我需要遍历每个文件并检查它是否与一些起始字符匹配 以便文件是否开始 temp txt tempONE txt tempTWO txt 因此 如果文件以 temp 开头并具有扩展名 txt
  • 在随机森林中使用 oob 和 k-fold x-val 时存在不同的插入符/训练错误

    这是我正在使用的代码 data set for debugging in RStudio data imports85 input lt imports85 settings set seed 1 dependent lt make nam
  • 指定多行文本框的最大长度

    我正在尝试使用asp
  • 限制 javascript 中的小数位不适用于 4.45678765e-6

    每次我使用 Math round 4 45678765e 6 10000 10000 时 它都会给我一个 0 值 但如果我删除 e 6 它会给出正确的答案 4 4567 我应该做什么 这是我的代码 该值是 10 的幂 例如 4 456787
  • Express/Mongoose 路由器:“由于路径“_id”处的值“未定义”,转换到 ObjectId 失败”

    我在 Express 中有一个简单的 API 允许用户将帖子标题 发布 和 删除 到 MongoDB 数据库中 由于某种原因 当我添加帖子标题 然后 删除 它时 我收到 在路径 id 处 值 未定义 转换到 ObjectId 失败 当我创建
  • 在函数内部改变 JavaScript 数组

    在 JavaScript 中 如何改变函数内数组的值 我知道使用某些数组方法时会发生这种情况 但它似乎不适用于正常分配 var arr 4 function changeArray arr arr 1 2 3 arr is still eq
  • 在 Android 上录音电话

    我正在尝试使用麦克风记录拨出呼叫 编写了此代码 但不起作用 我测试了简单音频记录的代码 它工作正常 我不确定何时开始媒体记录 我在广播接收器中启动可能存在问题 这里 Mediarecorder 是创建的另一个类 我在其中实现了 MediaR
  • 从此图像中识别绿色圆圈

    我目前制作了一个由黑色和绿色点组成的图像 我打印了它 然后用我的相机单击它 之后我制作了一个程序在opencv中扫描该图像 这是图像 这是代码 image imread ImageTryse jpg 1 Read the image cv
  • javascript - 打开隐藏的 iframe 以在文档准备好时下载文件

    我正在尝试使用这个技巧在文档准备好时打开文件下载对话框 同样的技巧又对我有用过一次 但那次 iframe 是在 ajax 调用后添加的 这是片段 虽然 iframe 在 html 代码中
  • ASP.NET MVC 编辑多个子记录的示例

    有谁知道 MVC 视图的任何示例或教程 该视图在一个表单上显示所有父 子数据 并允许所有子记录可编辑 例如 假设我有一个人员表和另一个包含他们拥有的车辆的表 一对一的形式 我想显示给定人的每辆车 并使数据元素可编辑 即车牌号 汽车颜色等 以
  • 将 php 正则表达式转换为 java 正则表达式

    有人可以帮我将 php 正则表达式转换为 java 正则表达式吗 如果您能帮助我 那就太好了 我将不胜感激 因为我在正则表达式方面不是那么强 str preg replace 1 1 str str preg replace str 我是怎
  • 为什么控制器在 angularjs 的 UI-router 中不起作用?

    当我尝试加载 测试 状态或任何这些状态时 控制器不会产生影响 模板已完美更改 但在状态配置中没有来自上述控制器的数据 而且我没有在任何地方使用 ng controller 指令 myApp config function stateProv
  • 跟踪视频中的编号标记

    我有一个视频 其帧如本问题的上一张图片所示 我们如何从图片中检测这些点上具有特定颜色的点 我检测到这些标记并对它们进行编号 如下图所示 我的问题如下 在一帧中检测到标记后 我需要在另一帧中检测它们并找出标记从其先前位置移动了多少 然而 在第
  • 在 C# 2.0 中使用 Console.Write 在同一位置写入字符串

    我有一个 C 2 0 控制台应用程序项目 需要在 while 循环中向屏幕写入一些内容 我不希望屏幕滚动 因为使用 Console Write 或 Console Writeline 方法将继续在控制台屏幕上增量显示文本 因此它开始滚动 我
  • Windows 相当于“tail”命令[重复]

    这个问题在这里已经有答案了 有没有办法模拟 nixtailWindows 命令行上的命令 我有一个文件 我想要一种方法来剪掉第一个文件n文本行 例如 D gt type file txt line one line two line thr
  • 如何在字符串中搜索多个子字符串

    我需要检查一个短字符串是否与子字符串列表匹配 目前 我这样做如下所示 ideone 上的工作代码 bool ContainsMyWords const std wstring input if std wstring npos input