、私は自分のアプリケーションの文字列のリストと比較したい文字列を持っています。私のCアプリケーションでは文字列のリストをハードコードすることができます。私のCアプリケーションでは、文字列を文字列リストと比較して
- 私のアプリケーションで文字列のリストを定義する最良の方法は何ですか?
- 私のアプリケーションの文字列と文字列のリストを比較する最も良い方法は何ですか?
、私は自分のアプリケーションの文字列のリストと比較したい文字列を持っています。私のCアプリケーションでは文字列のリストをハードコードすることができます。私のCアプリケーションでは、文字列を文字列リストと比較して
「文字列のリストと文字列を比較する」とはどういう意味ですか? 2つは異なる種類の「オブジェクト」であり、明らかに比較可能ではありません。
文字列"372"
と文字列リストとの比較はどのようになりますか{ "12, "42", "-11", "372" }
?
「文字列のリスト内の文字列を検索する」という場合は、リストをソートし、バイナリ検索を使用して候補が存在するかどうかを素早くチェックすることをお勧めします。
文字列のリストは、文字ポインタの配列char *strings[]
としてCで簡単に表現できます。並べ替えにはqsort()
を使用し、検索にはbsearch()
を使用できます。
私は効率が良いので、trieを使用すると、入力した文字列と指定された文字列を一致させるための検索時間がO(|S|)
になります。 [どこ| S |あなたが迅速なコーディングの後にある場合は入力文字列の長さ]
だけで事前に定義されたchar*[]
に文字列を格納し、あなたが速度超過をしたい、とあなたはに喜んでいる場合strcmp()
基本的な試行では、キャッシュパフォーマンス(この場合は1文字あたりのキャッシュミス)が非常に低いため、他の回答で説明されている単純なソート/バイナリ検索アプローチよりも劣る可能性があります。比較される文字列のリストが本当に巨大であるなら、私の助言は、キャッシュチューニングされたデータ構造をJudySL(http://judy.sourceforge.net/doc/JudySL_3x.htm)として使うことです。もしそれがオプションでないなら、(合理的にまばらな)ハッシュテーブル。 –
でそれを反復処理する、あります余分なツールを使用すると、gperfと考えることができます。文字列のリストがあれば、それはハッシュ関数に基づく非常に高速なインクルードテストを行い、そのためのCコードを吐き出します。
文字列が "372"の場合、提供した文字列のリストに対して、自分のコードがtrueを返す必要があります。 – gln
"文字列のリストは、文字ポインタの配列としてC言語で簡単に表現できます" - この場合、文字列を最初に長さで並べ替えて辞書編集することもできます。各長さの最初の文字列のインデックスを保持します。それは文字列が分かっているので、ビルド時にすべて実行できます。次に、各文字列へのポインタだけでなく、実際の文字列データを含む配列にバイナリ検索を実行できます。したがって、少しオーバーヘッドがあり、うまくいくとキャッシュのパフォーマンスが少し向上します。 –