2013-02-25 190 views
0

我試圖做一個程序來檢測缺少的字母,如果一個句子不是pangram。我在這裏搞亂了指針和數組,而我完全迷失了。 我不得不返回一個字符指針到函數getMissing Letters,並且它接受作爲參數的句子來檢查它是否爲a pangram。數組指針和返回類型

一個PAngram包含所有26個字母a-z。

#include <stdio.h> 
include <stdlib.h> 

char * getMissingLetters(const char *sentence) 
{ 
char ch, allchars[26] = {0}; 
    char * missing[26]={0}; 
int total = 0,i; 

while ((ch = *sentence++)) { 
    int index; 

    if('A'<=ch&&ch<='Z') 
     index = ch-'A'; 
    else if('a'<=ch&&ch<='z') 
     index = ch-'a'; 
    else 
     continue; 

    total += !allchars[index]; 
      allchars[index] = 1; 

} 
    for(i=0;i<26;i++) 
    { 
    if(allchars[i]==0) 
     missing[i]=(char)(i+97); 
     printf("missing[i]=%c\n",missing[i]); 
    } 

return missing; 
} 
int main() 
{ 
int i; 
const char *tests[] = { 
    "A slow yellow fox crawls under the proactive dog", 
    "The quick brown fox jumps over the lazy dog.", 
      "Lions, and tigers, and bears, oh my!" 
}; 
    char * missing[26]; 
for (i = 0; i < 3; i++){ 
     missing = isPangram(tests[i]); 

    } 

return 0; 
} 
+0

您能更具體地瞭解您遇到的問題嗎?另外,我建議你閱讀[c-faq.com](http://c-faq.com/)上的[指針部分](http://c-faq.com/ptrs/index.html),並可能還有其他與指針相關的部分。 – ughoavgfhw 2013-02-25 23:58:36

回答

1

你聲明missing作爲char *陣列,但是如果使用它作爲一個char陣列,這應該如果沒有錯誤,是給你大量的編譯器警告。

但是,您的主要問題是您要返回一個指向局部變量(missing)的指針,該指針超出範圍並在您返回時被銷燬。所以在main你有一個懸掛(無效)指針。你需要分配missing某處它仍然活着。例如,您可以將它分配在主體中,並將​​其作爲額外的基礎加入:

void getMissingLetters(char *sentence, char *missing) { 
    : 
int main() { 
    char missing[26]; 
     : 
    getMissingLetters(tests[i], missing);