如何在C语言中检查一个字符串是否在一个字符串数组中?

19
如何在C语言中编写下面的代码?此外,是否有内置函数可以检查数组长度? Python 代码
x = ['ab', 'bc' , 'cd']
s = 'ab'

if s in x:
  //Code

2
可能是 http://stackoverflow.com/questions/8848940/search-a-string-in-an-array-of-strings 的重复问题。 - Cacho Santa
1
这篇文章是将Python翻译成C,因此它不可能是一个在C中提出的问题的重复。 - Carey Gregory
1
@CareyGregory 为什么不呢?原帖作者必须将整个程序重写为C语言,原始的Python代码没有任何帮助。 - Lundin
1
是的,这很有帮助。它明确指出了提问者想要完成的任务。 - conjectures
4个回答

18

C语言中没有检查数组长度的函数。但是,如果数组在你想要检查的同一范围内声明,可以采取以下方法:

int len = sizeof(x)/sizeof(x[0]);
你需要迭代数组x并对每个元素进行strcmp操作,以检查s是否与x的其中一个元素相同。
char * x [] = { "ab", "bc", "cd" };
char * s = "ab";
int len = sizeof(x)/sizeof(x[0]);
int i;

for(i = 0; i < len; ++i)
{
    if(!strcmp(x[i], s))
    {
        // Do your stuff
    }
}

@CareyGregory - 我的原始帖子并不是错误的 - 这种方法不是一个函数。而且它仅在数组在相同的作用域中声明时才有效。 - user93353
2
我并没有说你的帖子是错误的;它并不是。它只是可以更好,但你已经修复了它。所以一切都好了,对吧? :-) - Carey Gregory
这并不完全符合 OP 的要求,因为如果目标字符串在字符串数组中出现多次,条件代码将执行多次,对吗? - Matheus Santana

12

像这样吗?

#include <stdio.h>
#include <string.h>

int main() {
    char *x[] = {"ab", "bc", "cd", 0};
    char *s = "ab";
    int i = 0;
    while(x[i]) {
        if(strcmp(x[i], s) == 0) {
            printf("Gotcha!\n");
            break;
        }
        i++;
    }
}

3
Python的in方法的一个可能的C实现如下:
#include <string.h>

int in(char **arr, int len, char *target) {
  int i;
  for(i = 0; i < len; i++) {
    if(strncmp(arr[i], target, strlen(target)) == 0) {
      return 1;
    }
  }
  return 0;
}

int main() {
  char *x[3] = { "ab", "bc", "cd" };
  char *s = "ab";

  if(in(x, 3, s)) {
    // code
  }

  return 0;
}

请注意,使用strncmp而不是strcmp可以更容易地比较不同大小的字符串。有关它们的更多信息,请参阅它们的手册页

1

有一个用于查找字符串长度的函数。它是来自于 string.hstrlen

然后,您可以使用相同头文件中的 strcmp 来比较字符串,就像其他答案所说的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接