阅读后,然后重新阅读问题(在@Charlie 的建议下),我得出结论,这些答案并没有解决真正的问题。我还得出结论,我仍然不知道确切的问题是什么,但如果 OP 回答了我的问题并澄清了问题,那么我会回来并更好地尝试解决它。现在,我将把它作为一个占位符......
要查找出现的字母或其他字符:
char buf[]="this is the string to search";
int i, count=0, len;
len = strlen(buf);
for(i=0;i<len;i++)
{
if(buf[i] == 's') count++;
}
或者,使用strtok()
,查找子字符串的出现:
不漂亮,蛮力方法。
// 要搜索的字符串
char str1[]="is";
char str2[]="s";
int count = 0;
char buf[]="this is the string to search";
char *tok;
tok = strtok(buf, str1);
while(tok){
count++;
tok = strtok(NULL, str1);
}
tok = strtok(buf, str2);
while(tok){
count++;
tok = strtok(NULL, str2);
}
count 应该包含“s”的出现次数,+“is”的出现次数
[编辑]
首先,让我要求对您的问题进行技术澄清,给定 A =“AR”,B =“START”,解决方案将是“A”,“R”和“AR”,在这种情况下都找到了在 B 的第 3 和第 4 个字母中。正确吗?如果是这样,那就很容易了。您可以通过对我上面已经完成的操作进行一些小的修改和添加来做到这一点。如果您对该代码有任何疑问,如果可以的话,我很乐意解决。
第二部分是您真正的问题:搜索比 KMP 算法更好,或者至少具有与KMP 算法相同的效率——这才是真正的技巧。如果选择最好的方法是真正的问题,那么一些谷歌搜索是正确的。因为一旦你找到并确定了解决子字符串搜索的最佳方法(效率 >= KPM),那么实现将是一组简单的步骤(如果你给它足够的时间),可能但不一定使用上面使用的 C 的某些相同组件。(我认为指针操作会比使用字符串函数更快。)但是这些技术只是实现,应该始终遵循良好的设计。以下是一些 Google 搜索,可帮助您开始搜索……(您可能已经去过其中的一些)
验证 KMP
KMP - 我们能做得更好吗?
KMP - 定义
的 KMP - 使用斐波那契字符串的改进
如果您在选择算法并开始实施您的设计后,对技术或编码建议有疑问,请发布它们。我的猜测是这里有几个人会喜欢帮助使用这种有用的算法。