C言語 ボイヤー・ムーア法について
私は、ネットなどを利用して、趣味でC言語の勉強をしているのですが、ボイヤー・ムーア法の項目で躓いてしまいました。
ランダムに単語をならべ、そこからある単語を検索して、文字を比べた回数(文字比較の回数)を表示したいと思っているのですが、意図しない回数が表示されてしまいます。さぐりさぐりな状態で、「そんなこともわからんのか」と言われてしまうかもしれませんが、アドバイスを頂けたら、と思います。
#include<stdio.h>
static char text[30]="is he your happy Monday night";
static char key[4]="your";
int shift(char a)
{
if (a==key[0]) return 3;
else if (a==key[1]) return 2;
else if (a==key[2]) return 1;
else return 4;
}
int main()
{
int i,j,k;
k=0;
i=3;
while (i<=29)
{
k=k+1;
if (text==key[3])
{
k=k+1;
if (text[i-1]==key[2])
{
k=k+1;
if (text[i-2]==key[1])
{
k=k+1;
if (text[i-3]==key[0])
{
printf("The word was found.\n");
i=i+30;
}
else j=shift(text[i-3]);
}
else j=shift(text[i-2]);
}
else j=shift(text[i-1]);
}
else j=shift(text);
i=i+j;
if(j<4)k=k+1;
}
printf(" %d times.\n", k);
return 0;
}
BM法について
Re: BM法について
まずは、使っている変数の意味を説明してみてください。
あと、コード全体を見て感じることは、「そのtext[]とkey[]限定版ですか?」ということです。
本来、BM法というのは任意の長さの探索対象文字列とキー文字列に対して
適用できるはずだと思います。
1バイト足りないのではないでしょうか。key[5]ではありませんか?
あと、コード全体を見て感じることは、「そのtext[]とkey[]限定版ですか?」ということです。
本来、BM法というのは任意の長さの探索対象文字列とキー文字列に対して
適用できるはずだと思います。
初期値が3である理由は何ですか?上に書いた「限定版ですか?」と関係ありますか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。