TextBox2の文字列に、TextBox1で入力した単語が何個含まれているのかを返すFunctionを考えているのですがどうも上手くいきません。
Public Function CntStr(txt1 as string, txt2 as string) as long
Dim i as long
Dim j as long
Dim k as long
k = txt2.length
i = 1
j = 0
do
i = txt2.IndexOfinstr(txt1)
if i > 0 then
i = i + k
j = j + 1
end if
loop until i = 0
CntStr = j
end Function
うまくいかないときは、まず自分の考えたロジックに基づき
入力された値から、どのように内部で処理されるのかを
机上で考え、何かに書いておきましょう。
その上で、プログラムをステップ実行し、それぞれのパラメータの
動きから、どこで自分の考えたロジックと異なる動きをしている
のかを見つけます。
その箇所が分かれば、次に何故そうなるのかを考えます。
以上のプロセスを完了すれば「うまくいかない」ところが
うまくいくようになると思いますよ。
.Netの事はわからないんだけど、
無限ループになる気がするのは自分だけですか?
txt2の内容が変わらなければ一生同じ値を吐き出しつづけるのではないかと
i > 0ならば、先頭のいらない部分を切り取ってループに戻るのが正解ではないかと
もしくはSplitしちゃうとか
色々とおかしいところは有るようですが、オリジナルコード
を尊重して、添削すると
Dim i As Integer = 0
Dim j As Integer = 0
Dim k As Integer = txt1.Length
Do
i = txt2.IndexOf(txt1, i)
If i >= 0 Then
i = i + k
j = j + 1
End If
Loop Until i < 0
Return j
こんなかな。
どうも有り難うございました!出来ました。
どうも有り難うございました!出来ました。
どうも有り難うございました!出来ました。
さらに質問です。大文字、小文字(アルファベット)の入力できちんと区別されてカウントされるのですが、これを区別なしでカウントする方法は?
例えばcをCCcの中から見つけると3となるようにしたいのです。デファルトでは、1と返ってきます。IgnoreCaseとかなのでしょうか?
[[解決]]をつけ、さらに追加質問をする場合は
別に新規で質問を起こした方がいいですよ。
このスレッドに追加しても、たぶんあまり見てもらえませんし、
あとからログ参照をする人にとっても探しにくい状態に
なってしまいますので。
単純に大文字なり小文字なりに変換して調べればいいのでは?
ツイート | ![]() |