• ベストアンサー

文字比較 

VB習って2週間です。ソート比較というんでしょうか 今 Dim newLedger(100) as string Dim oldLedger(100) as string が、ありそれぞれ文字が入っています。 newLedgerの配列に格納されている文字を oldLedgerの配列に格納されている文字に 一つづつ比較し、同じ文字があればnum変数に1追加 なければ1減少というプログラムを作成しているのですが、作りかた教えていただけないでしょうか?

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

>newLedger(0)をoldLedgerの配列の文字列と全て比較して >全て比較し終わったらnewLedger(1)とoldLedgerの配列の文字列と比較したいのです。 つまり2変数のマトリックスの全てを比較するということですね。 それなら、Forループを2重にします。 For i = 0 To 100   For j = 0 To 100     If StrComp(newLedger(i), oldLedger(j)) = 0 Then       num = num + 1     Else       num = num - 1     End If   Next j Next i ちなみに、このようにStrComp関数を使用した場合は、newLedgerとoldLedgerで完全に一致するかどうかになります。 どちらかがどちらかを含むというような場合は、さらに複雑になります。

その他の回答 (4)

  • Zeus089
  • ベストアンサー率30% (3/10)
回答No.5

For i = lBound(newLedger) To uBound(newLedger) For j = lBound(oldLedger) To uBound(oldLedger)   num = num + IIf(StrComp(newLedger(i), oldLedger(j)) = 0, 1, -1)  Next j Next i 悩め!悩め!!!

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

>ソート比較 どこがソートなのだろうかと疑問を感じたので、とりあえず突っ込んで見ました。 もしかして、配列内容は文字列は存在していなくて、数字のみとか? それ以外にも、 newLedger内部は重複していないデータ(数字と文字の混在)の配列 oldLedger内部は重複していないデータ(数字と文字の混在)の配列 これらの比較をするのであれば、コレクションを使用すると、効率があがると思います。 データの内容によって、最も高速な比較が違います。 マルチに対応するのであれば、maruru01氏の回答のように、全て回すしかないと思います。

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

下記が曖昧なように思うので、補足してください。 >文字が入っています。 (A)1文字だけが入っているのではないでしょうね。  例えばDだけとか。 (B)DOGとか文字の語句が入っているのですね。 私なら「文字」と言わないで、「文字列」と表現します。 >同じ文字があれば (A)なら、newの文字や語句の中のDの字がの数を数える ことになります。 (B)の場合DOGだけを数えるのか、DOGHOUSE のように、「含まれている」のも考えるのか。 (C)NEW(1)とOLD(1)だけ、NEW(2)とOLD(2)だけ対応す要素だけ比較するのか。 (D)OLD(1)の語句をNEW(x)(Xが0から 100まで)を同じ語句のものがないか探すのか。 (E)一致しない時なぜ1減らすのか、理解に苦しむ。 その効用は何でしょう。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 配列のインデックス同じどうしでの比較なら、 こんな感じでしょうか。 Dim i As Long For i = 0 To 100   If StrComp(newLedger(i), oldLedger(i)) = 0 Then     num = num + 1   Else     num = num - 1   End If Next i StrComp関数などはヘルプなどを参照して下さい。 ちなみに、同じ文字でなければ1減少だと、100個の場合、50個が同じで50個が違う場合は、差し引きで増減0になるけどそれでいいんですか。

jones0901
質問者

補足

ありがとうございます。 ただ上記の場合ですと、newLedger(i)とoldLedger(i)が一緒に進んでしまいます。 newLedger(0)をoldLedgerの配列の文字列と全て比較して 全て比較し終わったらnewLedger(1)とoldLedgerの配列の文字列と比較したいのです。

関連するQ&A