在此之前需要用到的知識:
- 頭檔案<string.h>中包含strlen()函式計算字串的長度,遇到結束性標 志’\0’時停止:
例如,字串為“lx adore zlr”這種字串常量,系統會在其后自動補上’\0’,即“lx adore zlr\0”,求字串長度的函式strlen()只要遇見’\0’,就會回傳函式值,所以回傳值為12(空格也算一個字符),
再舉個例子,strlen(lx\0zlr):其中的字串為“lx\0zlr”,而strlen()函式遇到’\0’就代表結束,所以返 回值為2,
- 當用字串給字符陣列賦值時,由于要添加結束符’\0’,陣列的長度要比字串的長度大1:
例如:char str[]=“lxadorezlr”; 該陣列在記憶體中的實際存放情況為:l x a d o r e z l r \0
該字串的長度為10,陣列長度為11,
現在直接上代碼:
#include<stdio.h>
#include<string.h> //提供strlen()函式計算字串的長度
int bf(char *s, char *t)
{
int i = 0, j = 0;
int len_s = strlen(s) - 1;
int len_t = strlen(t) - 1; //strlen()函式計算長度時不會算上,但是匹配的時候陣列末尾含"\0",所以要減 1,(想了好久555)
while (i <= len_s && j <= len_t)
{
if (s[i] == t[j])
{
i++;
j++;
} else
{
i = i - j + 2; //其實就是繼續比較主串的后一個字符,就是說可以另設一個引數從0開始,然后失配一次就加 1,(此處是為了和課本上統一)
j = 1;
}
}
if (j > len_t)
return i - len_t;
else
return -1;
}
int main()
{
int i, j, k;
char *str1 = "lxadorezlr";
char *str2 = "adore";
k = bf(str1, str2);
printf("%d", k);
return 0;
}
BF演算法學會以后,KMP演算法也能夠有初步認識了 (下次一定),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279909.html
標籤:其他
上一篇:死磕帶通濾波器
