ボイヤー・ムーア法について
Posted: 2013年2月17日(日) 16:00
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;
}
プログラムの流れは
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;
}