配列内の文字列の比較を行う必要があるこのプログラムがあります。最初に考えられるのは、もちろんstrcmp
、配列内の 2 つの文字列が同じかどうかを確認するために使用することです。ここで、ポインターを文字列と比較するだけでよいというオプションを考えてみましょう。これには、文字通り同じである各要素をメモリ内の同じ場所にマップするための準備が必要です。
で準備することで、これをすべて実行しましたがstrcmp
、今ではstrstr
(の方が速いと思います)。しかし、すべての文字列をチェックして最初に出現する文字列にマッピングする必要があるため、準備に非常に長い時間がかかります。この配列は数 MB の大きさであることに注意してください。
これが私がやりたいことの例です:
[0x0: "I", 0x1: "am", 0x2: "done", 0x3: "here.", 0x4: "I", 0x5: "have", 0x6: "done", 0x7: "everything!"]
[0x10: 0x0, 0x11: 0x1, 0x12: 0x2, 0x13: 0x3, »0x14: 0x0«, 0x15: 0x5, »0x16: 0x2«, 0x17: 0x07]
それでは、質問に移ります。この種のマッピングを、私が既に行っているよりも高速に行う別の方法はありますか?