c++ - 用于在字符串中查找字符序列的预构建函数?

标签 c++ string find character sequence

我正在处理一个多线程项目,对于项目的一部分,我需要查找字符串中是否存在给定的字符序列。我想知道 C++/C 是否有任何可以处理此问题的预构建函数,但我无法确定要搜索的确切“定义”。

我知道“strtr”和“find”,问题是函数需要能够找到一个跨字符串的 SPLIT 序列。

给定字符串“Hello World”,如果序列“H-W-l”存在,我需要一个返回 true 的函数。有什么预建的东西可以处理这个吗?

最佳答案

据我所知,子序列搜索本身既不是标准 C 库也不是标准 C++ 库的一部分。

但是,您可以将子序列搜索表示为正则表达式或“glob”。 Posix 要求正则表达式和 glob 匹配函数,而 C++ 标准库包含自 C++11 以来的正则表达式。这两种技术都需要修改搜索字符串:

  1. 正则表达式:HWlH.*W.*lregexec将搜索正则表达式(除非锚定,而这个不是);在 C++ 中,你会想使用 std::regex_search而不是 std::regex_match

  2. Glob:HWl*H*W*l*。全局匹配始终是完全匹配,尽管在我所知道的所有实现中,尾随 * 都得到了优化。这可用作 fnmatch Posix header fnmatch.h 中的函数。对于此应用程序,为标志参数提供 0

如果你不喜欢上面的任何一个,你可以在一个简单的循环中使用标准的 C strchr 函数:

bool has_subsequence(const char* haystack, const char* needle) {
  const char* p;
  for (p = haystack; *needle && (p = strchr(p, *needle)); ++needle) {
  }
  return p != NULL;
}

关于c++ - 用于在字符串中查找字符序列的预构建函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26110776/

相关文章:

c++ - RAII 类的通用命名约定是什么?

ruby - 在 Ruby 中增加字符串的一部分

java - java中读取和写入数据到文件中,数据中带有双引号

c++ unordered_set .find 方法无法编译,给出 "expression must have class type"错误

batch-file - 查找一个字符串并从该字符串删除到行批处理脚本的末尾

c++ - 为给定的整数递增单个数字 (msb)

c++ - C++结构过多的初始化程序

c++ - 扩展数组的输出返回意外的答案

javascript - 查找数组中最长的字符串

find - heredocs 如何与 xargs 一起使用?