gpt4 book ai didi

c++ - 检查字符串以匹配子字符串

转载 作者:太空宇宙 更新时间:2023-11-04 11:26:31 25 4
gpt4 key购买 nike

我有一长串由分隔符分隔的片段,比如“-”。它的形式是:

I-am-logged-into-StackOverFlow-I-am-using-StackOverFlow-
I-am-reading-a-book-A-I-have-written-a-book-B-

用户指定我必须比较的段。

例如,对于上面的字符串 - 1:他输入 5 和 9。两者都包含 StackOverFlow,所以我返回 true

对于字符串 - 2,第 6、12 段。但是。他们是不同的书A,B。所以,我返回 false

我尝试使用 std::regex 来做到这一点。

对于用户未输入的所有索引,我用
填充临时字符串的那些部分([^-]+)-,即一个或多个字符的字符串,不包含 -,但以此结尾。

对于用户输入的两个索引,我遇到了一个问题。如果我使用捕获组并在第一个索引中指定 ([^-]+-) 并为第二个索引使用 \1 (或任何第 n 个捕获组) ,结果不一致。 BookANewBook 匹配,这不是预期的。在某些情况下,a-not- 匹配。

然后我用这个临时字符串匹配上面的句子。

如何检查相等性 - 从头到尾的字符,以及给定索引处子字符串的长度

另外,我发现这个问题很相似,但有些结果并不一致。 Constructing a regular expression

PS:考虑到做正则表达式比在字符串的给定索引处提取段并比较它们更容易这一事实,我更喜欢前者。字符串的数量可能会达到数百个。

赞赏更好的解决方案。

最佳答案

一个可能的解决方案(肯定不是唯一的)可能是只使用 std::find并提取两个子串进行比较

(警告:以下代码尚未经过广泛测试,可能包含错误,它旨在作为进一步完善以满足您的需求的概念想法)/p>

bool match_positions(const std::string& str, int p1, int p2) {
int wordNo = 1;
size_t beg = 0, pos;
std::string first, second;
while ((pos = str.find('-', beg)) != std::string::npos ||
(first.empty() && second.empty()) ) {
if (wordNo == p1)
first = str.substr(beg, pos - beg);
if (wordNo == p2)
second = str.substr(beg, pos - beg);
beg = pos + 1;
++wordNo;
}
if (first.empty() || second.empty())
return false;
else
if (!first.compare(second))
return true;
else
return false;
}

Example

因为这是(据我所知)“在第 n 个定界符处找到子字符串”问题,所以我不会选择正则表达式,而是将它们留给更复杂的模式匹配任务。

关于c++ - 检查字符串以匹配子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484737/

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