【问题标题】:How to check if a string is in an array of strings in C?如何检查字符串是否在C中的字符串数组中?
【发布时间】:2026-01-23 02:40:01
【问题描述】:

如何用 C 编写下面的代码?另外:是否有任何内置函数可以检查数组的长度?

Python 代码

x = ['ab', 'bc' , 'cd']
s = 'ab'

if s in x:
  //Code

【问题讨论】:

  • *.com/questions/8848940/… 的可能重复项
  • 这篇文章是 Python 翻译成 C,所以它不能与 C 中提出的问题重复。
  • @CareyGregory 为什么不呢? OP不得不将整个程序重写为C,原始Python代码没有帮助。
  • 是的,它很有帮助。它准确地说明了提问者希望完成的任务。

标签: c arrays


【解决方案1】:

C 中没有检查数组长度的函数。但是,如果数组声明在与要检查的范围相同的范围内,则可以执行以下操作

int len = sizeof(x)/sizeof(x[0]);

您必须遍历 x 并对数组 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 - 我原来的帖子没有错 - 这种方式不是功能。并且只有在数组声明在同一范围内时才有效。
  • 我没有说你的帖子不正确;不是。它只是比它本来的要少,但你修好了它。所以一切都很好,是吗? :-)
  • 这不是 OP 想要的,因为如果目标字符串在字符串数组中出现多次,条件代码将执行多次,对吧?
【解决方案2】:

这样的??

#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 可以更轻松地比较不同大小的字符串。在manpage 中了解他们两人的更多信息。

    【讨论】:

      【解决方案4】:

      有一个查找字符串长度的功能。从string.hstrlen

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

      【讨论】:

        最近更新 更多