求大神啊
某日,小Y同学迷恋上一女生,于是决定向该女生表白。可是,悲剧往往发生在帅哥身上。在小Y同学表白后,该女生发来一短信,该短信由一行字符串组成。并告知小Y同学,如若能从中找出字符串 “i”“love”“you”三个字符串,并且这三个字符串在短信中是顺序的,并且任意两个不能相邻,则表示她喜欢小Y同学。请你写一段程序帮小Y同学解决这个问题吧! Input
N组测试数据,每组测试数据一行 Output
对应每组测试数据的结果,如果存在 顺序的 并且互不相邻 的三个字符串“i”“love”“you”串则输出“Yes”,否则输出“No”
Sample Input
2
Iloveanbyou
woibuloveayou
Sample Output
No
Yes
[解决办法]
上面漏了个return true;
#include <iostream>
using namespace std;
bool search(const char* str, const char** noKMPpatterns, size_t pattern_count)
{
if (str == nullptr
[解决办法]
noKMPpatterns == nullptr
[解决办法]
pattern_count == 0) return false;
int matchIndex = 0, curPatternLen = 0;
for (size_t curPatternIndex = 0; curPatternIndex < pattern_count; ++curPatternIndex)
{
if (*str == '\0') return false;
matchIndex = 0; // reset match index for next pattern match
while (*str != '\0' && noKMPpatterns[curPatternIndex][matchIndex] != '\0')
if (toupper(*str++) != toupper(noKMPpatterns[curPatternIndex][matchIndex++])) matchIndex = 0; // fail, reset index
if (noKMPpatterns[curPatternIndex][matchIndex] != '\0') return false; // not find this pattern.
if (*str != '\0') str++; // keep distance for each pattern
}
return true;
}
void searchtest()
{
const char* lovestring1 = "Iloveanbyou";
const char* lovestring2 = "woibuloveayou";
const char* patterns[] = {"i", "love", "you"};
cout << std::boolalpha << search(lovestring1, patterns, sizeof(patterns)/sizeof(patterns[0])) << endl;;
cout << std::boolalpha << search(lovestring2, patterns, sizeof(patterns)/sizeof(patterns[0])) << endl;;
}