作业帮 > 综合 > 作业

杭电acm2026 Problem Description输入一个英文句子,将每个单词的第一个字母改成大写字母.Inpu

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/30 20:11:47
杭电acm2026
Problem Description
输入一个英文句子,将每个单词的第一个字母改成大写字母.
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行.
Output
请输出按照要求改写后的英文句子.
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
我的代码:
#include
int main(void)
{
char str[100],*p;
while(gets(str)!=NULL)
{
p=str;
*p=*p-32;
while(*p++!=NULL)
{
\x05 if(*(p-1)==' ')
\x05\x05 *p=*p-32;
}
while(*p!=NULL)
printf("%c",*p++);
printf("\n");
p=0;
}
return 0;
}
出错原因:输出的是乱码
修改最后输出语句后
代码变为
#include
int main(void)
{
char str[100],*p;
while(gets(str)!=NULL)
{
p=str;
*p=*p-32;
while(*p++!=NULL)
{
\x05 if(*(p-1)==' ')
\x05\x05 *p=*p-32;
}
printf(“%s\n”,str);
p=0;
}
return 0;
}
这样就正确了
我想知道我第一个代码哪里出错 为什么出现乱码.
因为while(*p++!=NULL)当*p=NULL时,循环结束然后p=p+1;
接着运行while(*p!=NULL) *p已经不再str数组中他的值是不定的
所以会乱码
再问: 那怎么修改 我不想用第二个输出 我想用第一个输出的方法
再答: p=str; 加一个 对了我得提醒一下, 你的*p++改成*(p++)这样增加可读性,就不用让我去查优先级和结合方向了