textの中にkeyと同じ文字が何文字目にあるかを見つけて出力するプログラムをつくろうと思ってます
プログラムの流れは
1.textを入力(長文)
2.keyを入力(1つの単語)
3.keyの文字数を確認
4.keyのスキップ表を作成
5.textの1文字目とkeyの後ろから比較していきtext==key[j]だったらお互い1引いていきj=0のとき一致なので場所を出力
pは現在の場所、jはkeyの文字さす、iはtextの文字をさしてます
間違いを指摘してくれるとうれしいです
#include<stdio.h>
int main(){
int i,n,m,p,kazu,memo,check;
char text[1000],key[10];
int table[10];
kazu=0;
/*キーワードの入力*/
printf("キーワードを入力してください\n");
scanf("%s",&text);
printf("探すキーワードを入力してください\n");
scanf("%s",&key);
i=0;
/*文字数を確認*/
while(1){
kazu++;
i++;
if(key=='\0'){
break;
}
}
/*テーブル作成*/
memo=1;
for(i=kazu-2;i>=0;--i){
table=memo;
memo++;
}
table[kazu-1]=kazu;
/*文字検索*/
i=kazu-1;
j=kazu-1;
p=0;
memo=0;
while(p!=1000){
memo++;
while(text==key[j]){
i--;
j--;
if(j==0){
break;
}
}
if(j==0){
printf("%d文字目が一緒でした\n",memo);
p=+table[kazu-1];
j=kazu-1;
i=p;
}else{
while(text!=key[j]){
j--;
if(j>0){
break;
}
}
if(j>0){
p=+table[j];
j=kazu-1;
}else{
p=+table[kazu-1];
j=kazu-1;
}
}
}
return 0;
}
ボイヤー・ムーア法について
Re: ボイヤー・ムーア法について
ということは、今は正しく動いていないのですね。ageha22 さんが書きました: 間違いを指摘してくれるとうれしいです
どういう風に正しく動かないか、現象を説明してくださると大いに助かります。
& は必要でしょうか。
文法的には正しい(コンパイルエラーは出ない)のかもしれませんが、
何がしたいのかは意味不明です。
= と + の順序は本当に正しいでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
-
ageha22
Re: ボイヤー・ムーア法について
わざわざ返信ありがとうございます
このプログラムを実行したところ
x文字目が一緒でした
という表示が永遠に表示されつづけます(xは0からはじまり無限に1づつ増分していく)
すいません間違えました&不要です
p=+table[kazu-1];
p=+table[j];
p=+table[kazu-1];
についてですが
それぞれ
pにtableの[kazu-1]番目の数字を加算
pにtableの[j]番目の数字を加算
pにtableの[kazu-1]番目の数字を加算
という風にしようと思いました
このプログラムを実行したところ
x文字目が一緒でした
という表示が永遠に表示されつづけます(xは0からはじまり無限に1づつ増分していく)
すいません間違えました&不要です
p=+table[kazu-1];
p=+table[j];
p=+table[kazu-1];
についてですが
それぞれ
pにtableの[kazu-1]番目の数字を加算
pにtableの[j]番目の数字を加算
pにtableの[kazu-1]番目の数字を加算
という風にしようと思いました
Re: ボイヤー・ムーア法について
このコードが
本当にその意図どおりに動くでしょうか。ageha22 さんが書きました: pにtableの[kazu-1]番目の数字を加算
私には、pにtableの[kazu-1]番目の数字を『代入』している
(つまり、現状では + を書いても書かなくても同じ動き)ように見えます。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
-
ageha22
Re: ボイヤー・ムーア法について
ありがとうございます
p=+table[kazu-1];
を
p=p+table[kazu-1];
に戻したところ無限ループが終わりました
今は
1文字目が同じです
2文字目が同じです
・・・
20文字目が同じです
とすべて同じになってる状況です
p=+table[kazu-1];
を
p=p+table[kazu-1];
に戻したところ無限ループが終わりました
今は
1文字目が同じです
2文字目が同じです
・・・
20文字目が同じです
とすべて同じになってる状況です
Re: ボイヤー・ムーア法について
今さらかもしれませんが、
仮に、text[] の中身が英文で、空白で区切ってある複数の単語からなるものだとすると、BM法以前の話で、
text[] と key[] の具体例を示していただけないでしょうか。
仮に、text[] の中身が英文で、空白で区切ってある複数の単語からなるものだとすると、BM法以前の話で、
scanf() では text[] に想定どおりの内容が入らないような気がします。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。