Как проверить, находится ли строка в массиве строк в C?

Как написать ниже код в C? Также: есть ли встроенная функция для проверки длины массива?

Код Python

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

if s in x:
  //Code

Ответ 1

Нет функции для проверки длины массива в C. Однако, если массив объявлен в той же области, где вы хотите проверить, вы можете сделать следующее

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

Вам нужно выполнить итерацию через x и выполнить strcmp для каждого элемента массива x, чтобы проверить, совпадает ли 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
    }
}

Ответ 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

Существует функция поиска длины строки. Это strlen от string.h

И затем вы можете использовать strcmp из того же заголовка для сравнения строк, как говорят другие ответы.

Ответ 4

Возможная реализация C для Python in методе может быть

#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.

Ответ 5

Я бы предпочел не добавлять как можно меньше библиотек и думать, что зависимость от strncmp не нужна.

Вот функция;

// identifies if item is in array
// returns 0 if fail, sequence if true
int inarray(char **array, char *item){
    int i,j,x=0;

    for(i=0;i<sizeof(array); i++){
        if(sizeof(item)==sizeof(array[i])){
            j=0;
            while(j<sizeof(item)){
                if(item[j]!=array[i][j])
                    break;
                if(j==sizeof(item)-1)
                    x++;
                j++;
            }
        }
    }
    return x;
}

и тестовый драйвер

// inarray.c
#include <stdio.h>

int inarray(char**, char*);

int main (int argc, char **argv){
    int x;

    char *item = "def";
    char *array[] = {"abc","bcd","cde","def","efg","fgh","ghi","hij"};

    x = inarray(array, item);
    printf("Sequence in array = %d\n",x);

}