如果句子不是pangram,我正在尝试执行一个检测丢失字母的程序。我在搞乱指针和数组,我完全迷失了。 我必须返回一个指向函数getMissing Letters的char指针,并且如果它是一个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 :(得分:1)
您将missing
声明为char *
数组,但之后将其用作char
数组,如果没有错误,则应该为您提供大量编译器警告。
然而,您的主要问题是您返回一个指向局部变量(missing
)的指针,该变量超出范围并在您返回时被销毁。所以在main
中你有一个悬空(无效)指针。你需要在主要的地方分配missing
。例如,您可以在main中分配它并将其作为额外的agrument传递:
void getMissingLetters(char *sentence, char *missing) {
:
int main() {
char missing[26];
:
getMissingLetters(tests[i], missing);