2016-12-01 200 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; 
}