当我遇到这个障碍时,我正在准备我的计算机科学实践考试。 以下C代码用于大写从用户获取的字符串中的所有单词。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char a[20];
int i;
printf("Enter a string: ");
scanf("%[^\n]s",a);
if(islower(a[0])!=0)
{
a[0]=toupper(a[0]);
}
for(i=0;i<strlen(a);i++)
if(a[i]==' ' && isalpha(a[i+1]!=0))
a[i+1]=toupper(a[i+1]);
printf("%s\n",a);
return 0;
}
但上面的代码不执行任务。它接受输入,但给出相同的输出(输入的字符串,按原样)。此外,没有显示错误或警告。我正在使用gcc在Ubuntu 14.04中编码。我似乎不明白为什么代码不起作用。
答案 0 :(得分:2)
你应该阻止:
if(islower(a[0])==0)
{
a[0]=toupper(a[0]);
}
检查它是否不等于零而不是它?
答案 1 :(得分:1)
您的错误是isalpha(a[i+1]!=0)
,因为您应该只检查isalpha(a[i+1])
。对于输入字符串中的所有字符,表达式a[i+1]!=0
的返回值为1,除了最后一个字符。 isalpha(1)
的返回值为0,因此if
条件下的语句将对最后一个字符执行 ,而仅该字符前面有空格字符。
话虽如此,这是一个更好的方式来实现整个事情:
for (i=1; a[i]!=0; i++)
if (a[i-1]==' ' && isalpha(a[i]))
a[i] = toupper(a[i]);
答案 2 :(得分:0)
检查第一个)在isalpha(a [i + 1]!= 0)),它放错地方。
for(i=0;i<strlen(a);i++)
if(a[i]==' ' && isalpha(a[i+1])!=0)
a[i+1]=toupper(a[i+1]);
也应该是第一个
if(islower(a[0]){}