【发布时间】:2018-03-06 13:06:17
【问题描述】:
我已经编写了这段代码,但我有一点问题。 此代码应获取一个字符串并检查此字符串是否包含所有字母... 如果不是,则输出为“不是 pangramma!”。 如果是“PanGramma!”。 问题是我希望它也计算单词之间的空格数。但是,当输入是至少有一个空格的字符串时,即使它包含所有字母,输出也将始终是“Not a PanGramma!”。 有人可以帮我吗?
#include <stdio.h>
char UpCase (char c);
int isPangram (char *str);
int main()
{
char str[100];
printf("Please enter yout string: \n");
scanf("%s", str);
if (isPangram (str) == 1)
{
printf("PanGramma!\n");
}
else
{
printf("Not a PanGramma!\n");
}
return 0;
}
char UpCase (char c)
{
if (c>='a' && c<='z')
{
return c-'a'+'A';
}
return c;
}
int isPangram (char *str)
{
int i=0;
int hist[27]={0};
while (str[i] !=0)
{
str[i]=UpCase(str[i]);
if (str[i] == ' ')
{
hist[26]++;
}
else
{
hist[str[i] - 'A']++;
}
i++;
}
for (i=0; i<26; i++)
{
if(hist[i] == 0)
{
return 0;
}
}
return 1;
}
【问题讨论】:
-
return c-'a'+'A';是一个不可移植的烂摊子。请改用toupper。并以类似的方式修复c>='a' && c<='z':islower? -
scanf在看到空格时停止...替换为fgets并重试。 -
我使用了 scanf ("%[^\n]%*c", str);