2016-12-01 196 views
1

我即将中风,我无法弄清楚为什么此代码无法工作。目标是为字符串搜索字符串数组。如果找到正在搜索的字符串,则该方法返回true,否则返回false。不幸的是,我犯了一些错误,并且即将中风,因为我无法弄清楚它是什么。 printf只是为了显示数组正在迭代,非常感谢您的帮助。另外,for循环中的-1只是一些有用的东西,我不认为它应该在那里,但要注意当你把它拿出来时会发生什么。另外,我想指出的是,由于我正在研究的部分,我声明数组的方式是我需要的。将字符串与字符串数组进行比较的问题C

#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

为什么你有别的吗?我认为如果字符串stringInList指向的字符串不是我正在查找的字符串,那么删除它将使此工作 – Dani

+0

需要它遍历数组,如果字符串stringInList指向的字符串不是我正在查找的字符串,则指针需要递增,直到它位于下一个字符中字符串 – holycatcrusher

+3

@holycatcrusher:字符串不保证按顺序分配。 – Dani

回答

1

如果char *planets[] = {...};后设置char *search = "Earth";,它可能工作。
例如

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; 
}