如何检查字符串数组中是否存在字符串

Jav*_*ser 3 c arrays string

我正在寻找一种方法来检查特定字符串是否存在于大量字符串中.该阵列是多维的:all_strings[strings][chars];.基本上,这个数组是一个字符数组的数组.每个字符数组以'\ 0'结尾

给定另一个字符数组,我需要检查这些字符是否已经存在all_strings,类似于python in关键字.

我根本不确定如何解决这个问题,我知道strcmp可能有所帮助,但我不确定如何实现它.

aut*_*tic 5

正如潜伏者所说,天真的方法是简单地循环调用字符串数组strcmp.string_in不幸的是,他的功能由于误解而被打破sizeof(string_list),应该看起来像这样:

#include <string.h>
int string_in(char *needle, char **haystack, size_t haystack_size) {
    for (size_t x = 0; x < haystack_size; x++) {
         if (strcmp(needle, haystack[x]) == 0) {
             return 1;
         }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,这是相当低效的.如果您只是偶尔使用它,特别是在一小组字符串上,它会做,但如果您正在寻找一种有效的方法来反复执行搜索,则更改每个搜索查询搜索,我会考虑的两个选项是:

  • 如果all_strings是相对静态的,你可以像这样对数组进行排序:qsort(all_strings, strings, chars, strcmp);...然后当你想确定一个单词是否存在时,你可以bsearch用来执行二进制搜索,如下所示:char *result = bsearch(search_query, all_strings, strings, chars, strcmp);.请注意,all_strings更改时,您需要再次对其进行排序.
  • 如果all_strings经常更改,您可能会受益于使用其他一些数据结构,如trie哈希表.