BM法(ボイヤームーア法)について(Visual Basic)

このQ&Aのポイント
  • VisualBasicにて、BM法のプログラムを作りたいと思いましたが、書き方が、わかりません。
  • テキストボックスに文字列とパターンを入力し、BM法を用いて一致する位置をラベルに表示するプログラムを作成したいと考えています。
  • フォームのイラストを含めたサンプルプログラムがあれば参考にしたいです。
回答を見る
  • ベストアンサー

BM法(ボイヤームーア法)について(Visual Basic)

BM法(ボイヤームーア法)について(Visual Basic) VisualBasicにて、BM法のプログラムを作りたいと思いましたが、書き方が、わかりません。 概要を下記にまとめますので、どなたか、作ってみてくれませんか? お早めにお願いします!! 1.テキストボックス(入力(これ以外でも可))にて、テキスト(検索される文字列)を入力する。 2.上記にて、パターン(比較する文字列)を入力する。 3.BM法にて、1.と2.を比べて、あったら、ラベル(これ以外も可)にて a(たとえば) & "文字目にありました。" & Chr(13) & Chr(13) 4.続けて検索するか、しないか(While(これ以外でも可))をテキストボックス(これ以外でも可)にて入力してもらう。(C(大文字か、小文字のC)を入力したら、続ける。E(大文字か、小文字のE)を入力したら、終了する))) すべての入力には、テキストボックス(これ以外でも可)にて入力してもらい、ボタンをクリックすることによって、変数に代入される。 こちらの方法では、フォームのイラストを載せていただければ、ありがたいです。 上記のような、プログラム作りは可能でしょうか? 可能なら、作ってみてくれませんか? 不可能なら、どこがダメか、どうしたらよいか、を踏まえ、サンプル的なプログラムを作ってみてくれませんか? お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> こちらの方法では、フォームのイラストを載せていただければ、ありがたいです。 さすがにこれは.... プログラムがまったく作れなくても、絵くらい描けるでしょ。出来の善し悪しは置いとくとしても。 それに、Visual Studioのデザイナを使えば、とりあえず、テキストボックス等の部品を並べて、形だけは作ることができます。 まったくパソコンを使ったことが無い、というのならともかく、普段から使っていれば、なんとなくはイメージできるのでは? アドバイスするなら > 4.続けて検索するか、しないか(While(これ以外でも可))をテキストボックス(これ以外でも可)にて入力してもらう。(C(大文字か、小文字のC)を入力したら、続ける。E(大文字か、小文字のE)を入力したら、終了する))) 普段使っているアプリケーションをよく思い出してください。 「継続」「終了」するときってどうやってますか? ・「継続」→特に操作しなくても、継続される ・「終了」→「終了」ボタンか、ウィンドウに付いてる×ボタンか、メニューから「終了」を選ぶ というのがほとんどだと思います。 操作方法は統一させるのが流儀です。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

宿題みたいなものを、ここでコードまで教えてくれと言うのは、嘗てはこのコーナーの規約違反であった。今はOKWAVEも甘くして、緩めているようだが。 こんなに露骨に>作ってみてくれませんか、と言うのは見るのは初めてです。 先生の回答・解説を見て勉強してください。判らないなら判らないと先生に言うのが、先生も実情把握になるでしょう。 ーー http://www.geocities.jp/m_hiroi/light/pyalgo11.html http://d.hatena.ne.jp/g940425/20100522/1274520718 などにこのアルゴリズムの考え方の解説が有ります。

関連するQ&A

  • BM法(ボイヤームーア法)について

    BM法(ボイヤームーア法)について VisualC++にて、BM法のプログラムを作りたいと思いましたが、書き方が、わかりません。 概要を下記にまとめますので、どなたか、作ってみてくれませんか? お早めにお願いします!! 1.scanf(入力関数(これ以外でも可))にて、テキスト(検索される文字列)を入力する。 2.上記にて、パターン(比較する文字列)を入力する。 3.BM法にて、1.と2.を比べて、あったら、"○○文字目にありました。\n\n" 4.続けて検索するか、しないか(While(これ以外でも可))を入力してもらう。(C(大文字か、小文字のC)を入力したら、続ける。E(大文字か、小文字のE)を入力したら、終了する))) 上記のような、プログラム作りは可能でしょうか? 可能なら、作ってみてくれませんか? 不可能なら、どこがダメか、どうしたらよいか、を踏まえ、サンプル的なプログラムを作ってみてくれませんか? お願いします。

  • ボイヤームーア法

    今課題が分からなくて困ってます。ボイヤームーア法でテキストファイルから文字列を探索するプログラムなんですが以下のようなプログラムは作成できたのですがこれだとテキストの同じ行に同じ文字列がある場合、最初の1つしか表示してくれません。課題は今日提出なので早急にお願いします。 例 テキストabcabcabc 文字列abc 結果abc line1 rank1 どうすれば全部表示させられるのか教えてください。 #include<stdio.h> #include<string.h> #define MAXCHR1 1000 #define MAXCHR2 256 int bm(char txt[MAXCHR1], char pat[MAXCHR2]) { int a,b,length1,length2,skip[MAXCHR2+1]; length1=strlen(txt); length2=strlen(pat); for(a=0;a<=MAXCHR2;a++){ skip[a] = length2; } for(a=0;a<length2 - 1;a++){ skip[pat[a]] = length2 - a - 1; } while(a<length1){ b=length2 - 1; while(txt[a] == pat[b]){ if(b==0){ return(a); } b--; a--; } a += skip[txt[a]]; } return(-1); } int main(void) { int x,line=0; char filename[MAXCHR2],ex[MAXCHR1][MAXCHR1],strg[MAXCHR2]; FILE *fp; printf("Input filename:"); scanf("%s",filename); getchar(); fp=fopen(filename,"r"); if(fp == NULL){ printf("read open error!\n"); return(-1); } printf("Input search string:"); scanf("%s",strg); getchar(); while(fgets(ex,MAXCHR1,fp)!=NULL){ x=bm(ex,strg); ++line; if(x==-1){ printf("There is not '%s' in %dth line\n",strg,line); } else{ printf("%s line%d rank%d\n",strg,line,x+1); } } fclose(fp); return 0; }

  • ボイヤームーア法について

    課題が分からなくて困っています。課題の内容は「ボイヤームーア法を用いてファイルの先頭からテキストを1行ずつ(1行の文字数は999文字以下とする)読み込み、何行目の何文字目に探索文字列の先頭が存在するか出力するプログラムを作成せよ。探索文字列中に同じ文字が含まれる場合については探索方法を改良せよ」というものです。1行の文字列を探索するプログラムは作れたのですが、複数の行を読み込んで何行目の何文字目かを出力させる方法がどうしてもわかりません。無知な私ですがどうかよろしくお願いします。締め切りは明日なのでなるべく早くお願いします。 #include<stdio.h> #include<string.h> #define MAX1 1000 #define MAX2 256 int bm(char txt[MAX1], char pat[MAX2]) { int a,b,len1,len2,skip[MAX2+1]; len1=strlen(txt); len2=strlen(pat); for(a=0;a<=MAX2;a++){ skip[a]=len2; } for(a=0;a<len2-1;a++){ skip[pat[a]] = len2-a-1; } while(a<len1){  b=len2-1;   while(txt[a]==pat[b]){    if(b==0){ return(a);    }    b--;    a--;   }   a+=skip[txt[a]]; } return(-1); } int main(void) { int x; char filename[MAX2],ex[MAX1],strg[MAX2]; FILE *fp; printf("Input filename:"); scanf("%s",filename); getchar(); fp=fopen(filename,"r"); if(fp == NULL){ printf("read open error!\n"); return(-1); } printf("Input search string:"); scanf("%s",strg); getchar(); for(i=0;i<MAX1;i++){    if(feof(fp)){   break;  } fgets(ex[i],MAXCHR1,fp); } x=bm(ex,strg); if(x==-1){  printf("There is not pattern in the text"); } else{  printf("%s%d\n",strg,x+1); } fclose(fp); return 0; }

  • ASCIIコードとVisual Basic Editorのフォームについて

    仕事上、必要な為に攻略本などを片手にVisual Basic Editorを我流でプログラミングしている全くの素人です。 現在はVisual Basic Editorにフォームを挿入しテキストボックスを作成して、テキストボックスに入力した文字をSheet上の指定のセルに表示するようなプログラミングをしています。 しかし、ローマ字入力の場合は全く問題ないのですが、かな入力の場合( )カッコなど英数キーを一度押下しなければ入力できない文字については、テキストボックスのIMEコード設定をカナ入力の6番に設定している為、入力する事ができません。 1.テンキーの"/"、"*"キーに"("、" )"を割り当ててしのいでいます。一文字入力するごとに文字コードをASC関数で調査し"/"、"*"キーに該当する場合は「"それ以前に入力していた文字"+"("」を入力するプログラムにしています。しかし、この場合マウスでカーソルをインサートさせて途中入力した場合、カッコ以外の文字が入力される為完全とは言えません。また、カッコのみを入力するように指定すると、それまでテキストボックスに入力していた文字が消去されカッコのみが入力されてしまいます。良いプログラミングがありましたら、ご教授願います。 2.上記で英数キーを押下するとIMEコードが変換されるようにするのが良い方法だと思うのですがヘルプで検索してもASCIIコードが分からないので断念しました。キャリッジリターンは「13」NumLockは「144」までは分かったのですが文字キー以外のASCIIコードが掲載されている書物や方法がありましたら教えて下さい。宜しくお願い致します。

  • BMサーチというアルゴリズム

    昔、CマガジンでBMサーチという文字列を早く検索するアルゴリズムがあったのですが、その本がなく、詳しいソースや解説をしているサイトや本を探しています。 moto = "....."; if ( strcmp(moto, "AA") == 0 ) { }else if ( strcmp(moto, "AB") == 0 ) { ... } と、BMサーチではどちらが早いのでしょうか? Cライブラリになっているので、中でBMサーチみたいなことはしているのでしょうか?

  • ボイヤ・ムーア法のアルゴリズムがよくわかりません。

    ボイヤ・ムーア法のアルゴリズムがよくわかりません。 テストで kouhou-ni-jouhou-ga-aru.(-はスペースです。) というテキストをjouhouで検索した場合のパターンの移動の様子をかけという問題で 先生の答えは kouhou-ni-jouhou-ga-aru. jouhou -jouhou -------jouhou ----------jouhou となるらしいんですが、自分は kouhou-ni-jouhou-ga-aru. jouhou ---jouhou ---------jouhou ----------jouhou だと思いました。 一行目のkouhouのuから比較してjで一致しなかったら 次は三文字目のuに合わせるのではないのでしょうか? どういう考え方をすればいいのかをご教授いただきたいです。 よろしくお願いします。

  • 数字の全角文字を調べる

    visual basic 2008に関する質問です。 テキストボックスに入力した文字列の中に、数字の全角文字が 含まれているかどうかをチェックするメソッドはありますか? 下記の内容でビルドすると、エラーとなります。 (ソースより抜粋)--------------------------------------- Dim str As String = TextBox1.Text Dim chr As Char = str.Chars(0) If ((chr >= &H8250) And (chr <= &H8258)) Then Label1.Text = "数字は半角文字で入力して下さい。" End If ------------------------------------------------------- (エラー内容)------------------------------------------- 演算子'>='は、型'Char'および'Integer'に対して定義されて いません。 演算子'<='は、型'Char'および'Integer'に対して定義されて いません。 ------------------------------------------------------- 使用OSは、Windows Vistaです。 質問とあわせて、上記のエラーの対処方法について教えて頂けると 助かります。

  • Visual Basic 6.0の文字列の比較について

    二つの文字を比較し、同じ場合は[同じ文字列です]、違う場合[違う文字列です]と表示させるプログラムの作成してください。但し、メッセージボックスを使うこと。 このようなプログラムを作成するにはどうしたらいいのでしょうか?

  • マウスで選択した文字列を別の文字列に変える

    「TextBox1.Text」というテキストボックスに適当に文字列を入力して、 マウスで ある部分の文字だけを選択して、 その文字を別の文字を置き換える処理を実行するプログラムを作りたいです。 抽象的すぎるかもしれませんが、 どなたか教えていただきたいです。 よろしくお願いします。

  • 基本的な質問で本当に申し訳ありません。

    VB6で計算できるようなプログラムを作っています。 今3つのテキストボックスを作っています。そこにそれぞれ数字を入れてボタンを押すと計算結果が4つ目のテキストボックスに表示されるよう にしたいのです。 そこで質問したいのですが (1) 3つのテキストボックスすべてが入力されるまで変換ボタンを使用できない(押せない)ようにするのはどのようにしたらいいのでしょうか? (2) 3つのテキストボックスに入力された文字が数字以外の場合エラーメッセージ(数字を入力してくだい)と言う表示を出したい場合どのようにしたらいいのでしょうか? 上記の質問についてお解かりの方は、ぜひとも説明と方法を教えていただければと思っていますよろしくお願いします。

専門家に質問してみよう