掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
出現回数を数えるには? (ID:105306)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
イトウさんのコードは最後の一文字が検索対象から外れますね……。 文字列"あ"に対して検索文字列"あ"を入れると,みつからない,という結果になります。 また,文字列"あああい"に対して検索文字列"ああ"を入れると, イトウさんのコード:2 Sayさんの方法:1 です。 Vb5だとReplaceもSplitも使えないですが,私ならSayさんの結果になるように組みますね……。 >「プログラミングライブラリー」という文字列の「ラ」を >指定すると「3」とテキストボックスに表示させるプログラムを >作っていただけないでしょうか? こういう問題は分割して考えるものです。 ・特定の文字列に対して検索文字列を与えて検索文字列の出現回数を得る方法 ・数字をテキストボックスに表示する方法 #なので「新しい質問」と書いた。前者と後者に直接の繋がりはないので。 後者は既にたかみちえさんが書かれています。で,前者は関数にしてしまえばいいです。 イトウさんのを少し改良でも良いのですが,動作に嫌な点があるので,こんな感じのを使いますね。 ' C/C++ likeに書くための関数 (無限ループを嫌った) Private Function AssignAndReturn (ByRef AssignVariable As Long, ByVal AssignValue As Long) As Long AssignVariable = AssignValue AssignAndReturn = AssignValue End Function ' 文字列の出現回数計測関数 Function CountString (BaseString As String, FindString As String) As Long Dim start As Long, pos As Long, Counter As Long, FindLength As Long ' 検索文字列長をキャッシュ FindLength = Len(FindString) ' InStrに与える初期検索開始位置 start = 1 ' 実際に検索 (コメントアウトした三行はAssignAndReturnを展開したもの) ' Do While True ' pos = InStr(start, BaseString, FindString) ' If pos = 0 Then Exit Do Do Until AssignAndReturn(pos, InStr(start, BaseString, FindString)) = 0 ' 見つかった Counter = Counter + 1 ' 検索開始位置をずらす ' これをstart = pos + 1とするとイトウさんのコードの動作と同じになる start = pos + FindLength Loop CountString = Counter End Function Do Untilのところが珍しいかもしれませんが,それ以外は特別なことはやっていません。 #根本がC++屋なので。 多分,Visual BASIC Version 1.0あたりから動くはずです。 #Visual BASIC 4.0以前と4.0 16bit版はUnicodeじゃないから日本語を含むと誤動作の可能性はあり。 #Quick BASICとかMicrosoft BASICでも動くかな? 文字列の検索なんて言うのは,基本的に言語に依存しませんから, 「動く」コードの提示を受けても,「なぜ動くか」は絶対に調べるべきです。 上記だと,LenとInstrという組み込み関数を使っています。 これらがどのような動作を行うのか調べ,さらにデバッガを使って実際に値を入れたときの動作も調べることです。 >初心者なもんでイトウさんのソースを呼んでも理解が出来ずです。 >結果の変数はどれでしょうか? 初心者だからって,全部がわからないわけではないと思うのですが……。 全て訊くのではなく,「ここがわからない」といった風に訊ねるのが鉄則です。 Mid$の動作さえわかれば単純なことをやっているソースですから。 で,候補はひとつしか無いと思うんですけどね……。 とりあえず, ・Text1.Textが"プログラミングライブラリー" ・fdが"ラ" だとして,机上デバッグしてみればよいでしょう。 どれがカウンタ(CouNter)か,すぐわかりますよ。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.