PTA 中7-13 单词首字母大写 (15 分)

7-13
本题目要求编写程序,输入一行字符,将每个单词的首字母改为大写后输出。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出已输入的字符,其中所有单词的首字母已改为大写。
输入样例:How are you?结尾无空行输出样例:How Are You?结尾无空行


#include <stdio.h>
#include<string.h>
int main()
{
char s[100];
int i,len,k;
gets(s);
if(s[0]>='a'&&s[0]<='z')
s[0]=s[0]+'A'-'a';
len=strlen(s);
for(i=0;i<len;i++)
if(s[i]==' '&&s[i+1]>='a'&&s[i+1]<='z')
s[i+1]=s[i+1]+'A'-'a';
k=len;
for(i=0;i<k;i++)
printf("%c",s[i]);
}

在测试点1多个空格,长、短字符串与测试点2空格结尾 均显示运行时错误

需要判断前一个字符为空格,当前字符为字母时,将当前字符转成大写字母。
代码修改如下:


#include <stdio.h>
#include<string.h>
int main()
{
    char s[100];
    int i,len,k;
    gets(s);
    if(s[0]>='a'&&s[0]<='z')
        s[0]=s[0]+'A'-'a';
    len=strlen(s);
    for(i=1;i<len;i++) //这里从1开始
        if(s[i-1]==' '&&s[i]>='a'&&s[i]<='z') //这里是处理i
            s[i]=s[i]+'A'-'a';
    k=len;
    for(i=0;i<k;i++)
        printf("%c",s[i]);
}



#include <stdio.h>
int main()
{
    int c = 0;
    char ch;
    do
    {
        c = 0;
        do
        {
            ch = getchar();
            if (ch >= 'a' && ch <= 'z' && c == 0)
            {
                ch = ch + 'A' - 'a';
            }
            c++;
            putchar(ch);
        } while (ch != ' ' && ch != '\n');
    } while (ch != '\n');
    return 0;
}