私は、機能またはキーワードのリストを維持する必要があるプロジェクト (C で実装) に取り組んでいます。ユーザーが文字列を入力します。格納された文字列の配列で、この文字列の大文字と小文字を区別しない検索を行う必要があります。リストは現在 100 文字列で構成されており、新しい文字列が追加される可能性があります (1 年に 5 文字列程度)。
この配列を格納し、検索をより効率的にする最善の方法を知りたいです。
現在実装されているソリューションは次のようなものです:(私はこのコードをコンパイルしていません。これは単なるコード スニペットです。)
char **applist={ asdf , adgh, eftg , egty, ...}
char *user_input; // this string contains user entered string
int id;
switch(user_input[0])
{
case 'a':
case 'A':
switch(user_input[1]
{
case 's':
case 'S':
id=0
break;
case 'd':
case 'D':
id=1
break;
}
break;
case'e':
case'E':
switch(user_input[1])
{
case 'f':
case 'F':
id=2
break;
case 'g':
case 'G':
id=3
break;
}
break;
}
if(stricmp(user_input,applist[id]))
return id;
else
return -1;
実際のコードでは、applist はソートされていません。新しい文字列が applist に追加されるため、この配列を効率的に格納する方法が必要です。
アルファベット順にソートされた文字列を保存すると、新しい文字列が追加されるたびに、新しい文字列の正しい位置を手動で見つける必要があります。(実行時ではなくコードをコンパイルする前に、新しい文字列が applist に追加されます)
これを行う効率的な方法を提案します。
編集:私の現在のアプローチは、より長いコードにつながりますが、効率的です。しかし、このコードは保守が容易ではありません。私が必要としているのは、これと同じ効率でより小さなコードで検索できるデータ構造です。あなたが提案するデータ構造には、追加のオーバーヘッドがあってはなりません。唯一の要件は効率的な検索です。また、コンパイル時にデータ構造に要素を簡単に追加する方法。コンパイル時に新しい文字列が追加されるため、実行時の並べ替えは私の要件ではありません (これは、ユーザーが新しい文字列をリストに追加できないようにするためです)。