将字符串与字符串数组C进行比较的问题

时间:2016-12-01 23:15:20

标签: c string pointers

我即将中风,我无法理解为什么这段代码不起作用。目标是在字符串数组中搜索字符串。如果找到要搜索的字符串,则该方法返回true,否则返回false。不幸的是,我犯了一些错误,并且即将中风,因为我无法弄清楚它是什么。 printf只是为了显示数组正在迭代,你的帮助非常感谢。另外,for循环中的-1只是有帮助的东西,我认为它不应该存在,但是看看你拿出它时会发生什么。此外,我想指出,我声明数组的方式是我需要的方式,因为我正在研究的部分。

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

bool seachForString(char *firstString, int numberOfStrings, char *searchingFor);

int main(void){

  bool found;
  char *search = "Earth";

  char *planets[] = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
  found = seachForString(planets[0], 9, search);

  printf("Found: %d\n", found);

  return 0;
}

bool seachForString(char *firstString, int numberOfStrings, char *searchingFor){
  char *stringInList = firstString;

  for(int i=0; i<numberOfStrings-1; i++){
    printf("%s\n", stringInList);
    if(strcmp(stringInList, searchingFor) == 0){
      return true;

    }else{
      while(*(stringInList++) != '\0');

    }

  }

  return false;
}

1 个答案:

答案 0 :(得分:1)

如果您在char *search = "Earth";之后设置char *planets[] = {...};,则可能会有效 E.g。

char *planets[] = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
char *search = "Earth";

但是,字符串文字的放置并不总是您想要的。没有这样的保证。

所以改变它以传递数组。

像这样:

bool seachForString(char *firstString[], int numberOfStrings, char *searchingFor);

int main(void){

  bool found;
  char *search = "Earth";

  char *planets[] = {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
  found = seachForString(planets, 9, search);

  printf("Found: %d\n", found);

  return 0;
}

bool seachForString(char *firstString[], int numberOfStrings, char *searchingFor){
  char **stringInList = firstString;

  for(int i=0; i<numberOfStrings; i++){
    printf("%s\n", *stringInList);
    if(strcmp(*stringInList++, searchingFor) == 0)
      return true;
  }

  return false;
}