题目描述
输入一个只包含大小写英文字母和空格的句子,将每个单词的第一个字母改成大写字母。
输入
输入一个长度不超过100的英文句子。
输出
请输出按照要求改写后的英文句子。
样例输入 Copy
i like ACM
样例输出 Copy
I Like ACM
我改了好多次后的答案:
#include<stdio.h>
#include<string.h>
int main()
{
char chuan[150];
gets(chuan);
int n,a;
n=strlen(chuan);
for(a=0; a<n-1; a++)//首字母是空格与不是空格都要考虑到,有时候之所以写的程序运行结果与所给的样例一样,但提交的时候不对往往是考虑的不全面
{
if(chuan[0]>='a'&&chuan[0]<='z')//首个字符不是空格的情况
chuan[0]-=32;
if((chuan[a]==' '&&chuan[a+1]!=' ')&&(chuan[a+1]>='a'&&chuan[a+1]<='z'))//此语句包含了首字母如果是空格的情况
{
chuan[a+1]-=32;
}
}
puts(chuan);
return 0;
}
在此之前我提交过的答案,当然是有问题的
#include<stdio.h>
#include<string.h>
int main()
{
char chuan[150];
gets(chuan);
int n,a;
n=strlen(chuan);
for(a=0; a<n-1; a++)//未考虑到首个字母不是空格而是小写字母的情况
{
if((chuan[a]==' '&&chuan[a+1]!=' ')&&(chuan[a+1]>='a'&&chuan[a+1]<='z'))
{
chuan[a+1]-=32;
}
}
puts(chuan);
return 0;
}
#include<stdio.h>
int main()
{
char chuan[150];
gets(chuan);
int n,i,a;
for(i=0;chuan[i]!='\0';i++)
{
n++;
}
for(a=1; a<n; a++)//因为有a+1所以当a=n-1的时候,a+1则发生了越界
{
if(chuan[0]>='a'&&chuan[0]<='z')
chuan[0]-=32;
if(chuan[a]==' '&&chuan[a+1]!=' ')//未考虑到首个字符是空格的情况
{
if(chuan[a+1]>='a'&&chuan[a+1]<='z')
{
chuan[a+1]-=32;
}
}
}
puts(chuan);
return 0;
}