VB.NET 文字列の中に文字が何個あるのか見つけるFunctionは?

解決


VB.NET勉強  2005-08-13 13:22:41  No: 91476  IP: [192.*.*.*]

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

編集 削除
030  2005-08-13 13:50:15  No: 91477  IP: [192.*.*.*]

うまくいかないときは、まず自分の考えたロジックに基づき
入力された値から、どのように内部で処理されるのかを
机上で考え、何かに書いておきましょう。

その上で、プログラムをステップ実行し、それぞれのパラメータの
動きから、どこで自分の考えたロジックと異なる動きをしている
のかを見つけます。

その箇所が分かれば、次に何故そうなるのかを考えます。

以上のプロセスを完了すれば「うまくいかない」ところが
うまくいくようになると思いますよ。

編集 削除
通ってみた  2005-08-13 18:09:39  No: 91478  IP: [192.*.*.*]

.Netの事はわからないんだけど、
無限ループになる気がするのは自分だけですか?

txt2の内容が変わらなければ一生同じ値を吐き出しつづけるのではないかと
i > 0ならば、先頭のいらない部分を切り取ってループに戻るのが正解ではないかと

もしくはSplitしちゃうとか

編集 削除
ねろ  2005-08-13 19:14:59  No: 91479  IP: [192.*.*.*]

色々とおかしいところは有るようですが、オリジナルコード
を尊重して、添削すると
    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
こんなかな。

編集 削除
VB.NET勉強  2005-08-13 21:18:25  No: 91480  IP: [192.*.*.*]

どうも有り難うございました!出来ました。

編集 削除
VB.NET勉強  2005-08-13 21:18:32  No: 91481  IP: [192.*.*.*]

どうも有り難うございました!出来ました。

編集 削除
VB.NET勉強  2005-08-13 21:18:36  No: 91482  IP: [192.*.*.*]

どうも有り難うございました!出来ました。

編集 削除
VB.NET勉強  2005-08-15 02:14:05  No: 91483  IP: [192.*.*.*]

さらに質問です。大文字、小文字(アルファベット)の入力できちんと区別されてカウントされるのですが、これを区別なしでカウントする方法は?
例えばcをCCcの中から見つけると3となるようにしたいのです。デファルトでは、1と返ってきます。IgnoreCaseとかなのでしょうか?

編集 削除
さるべーじ  2005-08-15 10:57:55  No: 91484  IP: [192.*.*.*]

[[解決]]をつけ、さらに追加質問をする場合は
別に新規で質問を起こした方がいいですよ。
このスレッドに追加しても、たぶんあまり見てもらえませんし、
あとからログ参照をする人にとっても探しにくい状態に
なってしまいますので。

編集 削除
通ってみた  2005-08-15 21:02:25  No: 91485  IP: [192.*.*.*]

単純に大文字なり小文字なりに変換して調べればいいのでは?

編集 削除