0

文がパングラムでない場合に欠落した文字を検出するプログラムを実行しようとしています。ここでポインターと配列を台無しにしており、完全に失われています。関数 getMissing Letters に char ポインターを返す必要があり、パングラムかどうかを調べる文を引数として受け取ります。

PAngram には a ~ z の 26 個のアルファベットがすべて含まれています。

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

1 に答える 1

1

missing配列として宣言していますchar *が、それをchar配列として使用すると、エラーではないにしても、多くのコンパイラ警告が表示されます。

ただし、主な問題は、missingスコープ外になり、戻ると破棄されるローカル変数()へのポインタを返すことです。したがってmain、ぶら下がっている(無効な)ポインタがあります。missingメインでまだ生きている場所に割り当てる必要があります。たとえば、メインに割り当てて、追加のアグリメントとして渡すことができます。

void getMissingLetters(char *sentence, char *missing) {
    :
int main() {
    char missing[26];
       :
    getMissingLetters(tests[i], missing);
于 2013-02-26T00:10:28.013 に答える