BM法について
Posted: 2013年6月26日(水) 16:16
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;
}
私は、ネットなどを利用して、趣味で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;
}