出現的所有有找到非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