输入一段英文句子,让首字母大写。

题目描述
输入一个英文句子,将每个单词的第一个字母改成大写字母。

输入格式
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。

输出格式
请输出按照要求改写后的英文句子。

样例输入
i like acm
i want to get an accepted
样例输出
I Like Acm
I Want To Get An Accepted

我的代码在做题网站上无法通过,显示答案错误,但我在编译器中又没有问题,有没有佬知道的回答一下非常感谢。

#include<stdio.h>
#include<string.h>
int main() {
    char arr[999]={0};
    while (fgets(arr,sizeof(arr),stdin)) {
        int len = strlen(arr);
        arr[0] = arr[0] - 32;
        for (int i = 1; i < len; i++) {
            if (arr[i - 1] == ' ') {
                arr[i] -= 32;
            }
        }
        for (int i = 0; i < len; i++) {
            printf("%c", arr[i]);
        }//printf("\n");
    }return 0;
}

供参考:

#include<stdio.h>
int main()
{
    int  i;
    char s[101];
    while (gets(s) != NULL) {
        for (i = 0; s[i] != '\0'; i++)
        {
            if (i == 0 && s[i] >= 'a' && s[i] <= 'z')
                s[i] = s[i] - 32;
            else if (s[i] >= 'a' && s[i] <= 'z' && s[i - 1] == ' ')
                s[i] = s[i] - 32;
        }
        puts(s);
    }
    return 0;
}

第一个字符和其他位置的单词首字母,可能是大写字母,所以当转换大小写时,还需要判断当前字符是否是小写字母。

修改如下:


#include<stdio.h>
#include<string.h>
int main() {
    char arr[999]={0};
    while (fgets(arr,sizeof(arr),stdin)) {
        int len = strlen(arr);
        // 当第一个字母是小写字母时,则将第一个字母转为大写字母 
        if((arr[0]>='a'&&arr[0]<='z')){
            arr[0] = arr[0]-32;
        }
        
        for (int i = 1; i < len; i++) {
            // 当前一个字符是空格,并且当前字符是小写字母时,则将当前小写字母转为大写字母 
            if ((arr[i - 1] == ' ')&&(arr[i]>='a'&&arr[i]<='z')) {
                arr[i] -= 32;
            }
        }
        for (int i = 0; i < len; i++) {
            printf("%c", arr[i]);
        }//printf("\n");
    }
    return 0;
}
 

img

【以下回答由 GPT 生成】

问题优化及解答

优化提示1:

问题标签描述了问题所属的编程语言,请问您想要优化什么方面的问题?



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^