我正在做一个项目(用 C 语言实现),我们需要维护一个功能或关键字列表。用户输入一个字符串。我们需要在存储的字符串数组中对该字符串进行不区分大小写的搜索。该列表目前包含 100 个字符串,并且可能会添加新字符串(一年左右 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 中)
建议一种有效的方法来做到这一点。
编辑:我目前的方法导致代码更长,但效率更高。但是这段代码不容易维护。我需要的是一种数据结构,它可以以与此相同的效率进行搜索,但代码更小。您建议的数据结构不应有额外的开销。唯一的要求是高效搜索。以及一种在编译时轻松向数据结构添加元素的方法。在运行时排序不是我的要求,因为在编译时添加了新字符串(这是为了避免限制用户将任何新字符串添加到列表中)。