C语言大一PTA输入一个英文句子,将每个单词的第一个字母改成大写字母。

问题描述:

哪里错了???

 

#include"stdio.h"
#include"string.h"
int main()
{
    int i,j;
    char a[101];
    gets(a);
     if(a[0]>='a'&&a[i]<='z') {
            a[0]-=32;

        }

    for(i=1;i<strlen(a);i++) {
        if(a[i]=='\0'){
             if(a[i+1]>='a'&&a[i+1]<='z') {
            a[i+1]-=32;

        }

        }

    }
    puts(a);
    return 0;
}
 

 

 


#include"stdio.h"
#include"string.h"
int main()
{
    int j=0;
    char a[101];
    gets(a);
     if(a[0]>='a'&&a[j]<='z') 
         {
            a[0]-=32;

        }
    for(j=1;j<strlen(a);j++) 
    {
        if(a[j]=='\0'||a[j]==32)
        {
             if(a[j+1]>='a'&&a[j+1]<='z') 
             {
            a[j+1]-=32;
            }
        }
    }
    puts(a);
    return 0;
}

你的变量(i,j)没有先赋值,单词间判断空格

供参考:

#include<stdio.h>
#include<ctype.h>
int main()
{
    char a[100+1], c;
    int i;
    gets(a);
    if (a[0] != ' ') {
        if (islower(a[0]))//判断s[0]是单词开始
            a[0] = toupper(a[0]);
    }
    for (i = 0; (c = a[i]) != '\0'; i++)
    {
        if (c == ' ' && a[i + 1] != ' ') {//判断s[i+1]是一个单词的开始
            if (islower(a[i + 1]))//判断是否是小写字符
                a[i + 1] = toupper(a[i + 1]);
        }
    }
    puts(a);
    return 0;
}


#include"stdio.h"
#include"string.h"
int main()
{
    int i=0, j=0;
    char a[101];
    gets_s(a);
    if (a[0] >= 'a' && a[0] <= 'z') {
        a[0] -= 32;

    }

    for (i = 1; i < strlen(a); i++) {
        if (a[i] == ' ') {
            if (a[i + 1] >= 'a' && a[i + 1] <= 'z') {
                a[i + 1] -= 32;

            }

        }

    }
    puts(a);
    return 0;
}