我正在处理一个多线程项目,对于项目的一部分,我需要查找字符串中是否存在给定的字符序列。我想知道 C++/C 是否有任何可以处理此问题的预构建函数,但我无法确定要搜索的确切“定义”。
我知道“strtr”和“find”,问题是函数需要能够找到一个跨字符串的 SPLIT 序列。
给定字符串“Hello World”,如果序列“H-W-l”存在,我需要一个返回 true 的函数。有什么预建的东西可以处理这个吗?
最佳答案
据我所知,子序列搜索本身既不是标准 C 库也不是标准 C++ 库的一部分。
但是,您可以将子序列搜索表示为正则表达式或“glob”。 Posix 要求正则表达式和 glob 匹配函数,而 C++ 标准库包含自 C++11 以来的正则表达式。这两种技术都需要修改搜索字符串:
正则表达式:
HWl
⇒H.*W.*l
。regexec
将搜索正则表达式(除非锚定,而这个不是);在 C++ 中,你会想使用std::regex_search
而不是std::regex_match
。Glob:
HWl
⇒*H*W*l*
。全局匹配始终是完全匹配,尽管在我所知道的所有实现中,尾随*
都得到了优化。这可用作fnmatch
Posix headerfnmatch.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/