题目描述
输入一个英文句子,将每个单词的第一个字母改成大写字母。
输入格式
输入数据包含多个测试实例,每个测试实例是一个长度不超过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;
}
【以下回答由 GPT 生成】
问题标签描述了问题所属的编程语言,请问您想要优化什么方面的问题?
【相关推荐】