出现的所有有找到非const的char *str2
的所有出现(包括重叠)char *str1
一个高效方式,并输出匹配的数字位置中STR1在C(不是在C++,因为它不同)?Ç找到的子串
Ç找到的子串
回答
使用strstr()
一个循环中:
int get_substr_count(const char * haystack, const char *needle)
{
int count = 0;
const char *tmp = haystack;
while(tmp = strstr(tmp, needle)){
printf("Position: %d\n", (int)(tmp-haystack));
++count;
}
return count;
}
计数比赛;这与打印比赛的位置不一样。 –
你应该在while循环中递增tmp,否则这段代码会进入无限循环,因为它会继续从同一个索引进行搜索。 – Jignesh
你的函数将使用strstr()
在while
循环找到str2
的第一场比赛中str1
。然后您可以打印该匹配的偏移量。比赛结束后,你会继续搜索第一个字符。当strstr()
不再发现匹配时(由strstr()
返回NULL表示),您将停止循环。
如果您需要不重叠,您需要知道str2
的长度,并且您将开始下一个搜索匹配字符加上str2
的长度。
没关系,但我正在寻找更高效的算法,例如后缀数组,因为'str1'可以很长,程序执行时间有限 – NGix
尝试'strstr()';它可能很难被击败。至少在Mac OS X上,我在C中尝试过BM和KMP,并且在性能方面没有接近'strstr()'。我既惊讶又失望。你在ACGTAGGTCA类型字符串上进行'生物信息学'搜索吗? –
- 1. Ç查找字符串斜
- 2. Ç - 串连接
- 3. 源代码翻译到子集的ç
- 4. Ç递归函数来找到最小
- 5. 找到一个子串
- 6. 如何找到子串javascript
- 7. ç字串和__FUNCTION__
- 8. Ç对字符串
- 9. 免费()的字符串ç
- 10. 在字符串中找不到子串
- 11. 子串直到找到数字
- 12. 找到一个子字符串中的
- 13. 找到并连接子串的代码
- 14. 的Solr没有找到子串
- 15. 找到最长的重复子串
- 16. ç性能#返回串联
- 17. Ç - 字符串错误
- 18. 符号化多串ç
- 19. Ç - 比较字符串
- 20. Ç - 非定格式串旗
- 21. 复制串入结构ç
- 22. ç动态内存/ C串
- 23. Ç指定字符串指针到其他字符串指针
- 24. Ç - 字符串分割成字符串
- 25. Ç得到整数
- 26. Ç - 字符到六
- 27. ç查找字符串转换成文件
- 28. Ç - 找到所有的不同的数字
- 29. Ç<string>到的DataGridColumn
- 30. 如果找到插入子字符串
您是否需要重叠或不重叠的事件?你知道'strstr()'吗?你有什么尝试? –
这听起来像你需要strstr()。 – imreal
我需要包括重叠和我不知道strstr();) – NGix