一道c语言题目

编程将从键盘输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。我编程如下:#include<stdio.h>voidmain(){c... 编程将从键盘输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。
我编程如下:
#include<stdio.h>
void main()
{
char change(char *)
int i=0;
char ch,a[100];
while((ch=getchar())!='.')
a[i++]=ch;
a[i]='\0';
change(a);
puts(a);
}
char change(char *p)
{
while(*p!='\0')
{
if(*(p+1)>='a'&&*(p+1)<='z'&&*p==' ')
*(p+1)-=32;
p++;
}
return *(p+1);
}

但是这是错误的 请问高手我哪点错了以及该怎么解决!谢谢了 ~!!!!
展开
 我来答
NebulaSoft
推荐于2018-05-07 · TA获得超过620个赞
知道小有建树答主
回答量:161
采纳率:100%
帮助的人:315万
展开全部
#include<stdio.h>
#include<stdlib.h>
int main()
{
char change(char *);//错误一 ,缺少;
int i=0;
char ch,a[100];
while((ch=getchar())!='.')
a[i++]=ch;
a[i]='\0';
change(a);
puts(a);
system("pause");
return 0;
}
char change(char *p)
{
if(*p>='a'&&*p<='z') *p-=32;//要是不添加这句,则当第一个字符不是空格时无法进行转换
while(*p!='\0')
{
if(*(p+1)>='a'&&*(p+1)<='z'&&*p==' ')
*(p+1)-=32;
p++;
}
return *(p+1);
}
fhydralisk
2010-05-28 · TA获得超过1853个赞
知道小有建树答主
回答量:1088
采纳率:0%
帮助的人:609万
展开全部
首先,change函数应该置于main函数之前,或者在main函数前生命change函数(在main函数前加入这样一行:char change (char*);)
其次,你的change函数里有点逻辑问题:
循环体里的判断错误,你的逻辑是如果p指向空格,p的下一位指向'a'到‘z’,那么p的下一位减少32,似乎是正确的,但是第一位您没有考虑,因为第一位不是空格,而是字母。
正常的逻辑是这样的,判断p当前是否指向‘a’到‘z',如果是,则当前位减32,如果p指向空格‘ ’,直接跳过,如果p指向‘.’,退出循环,如果p指向其他,则不作操作,直接跳过。
参考的改正后的change代码:
char change(char *p)
{
while(*p!='.') //如果为. 退出循环
{
if (*p>='a' && *p<='z') *p-=32;
//如果是其他,则不作操作,不用进行判断。
p++;
}
return *(p+1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lchandyj
2010-05-28 · 超过11用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:0
展开全部
#include<stdio.h>
void main()
{
char change(char *);
int i=0;
char ch,a[100];
while((ch=getchar())!='.')
a[i++]=ch;
a[i]='\0';
change(a);
puts(a);
}
char change(char *p)
{
if(*p!=' '&&*p>='a'&&*p<='z')
{*p-=32;}
while(*p!='\0')
{

if(*(p+1)>='a'&&*(p+1)<='z'&&*p==' ')
{*(p+1)-=32;}
p++;
}
return *(p+1);
}
帮你改好了 我要分
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jlcust
2010-05-28 · TA获得超过327个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:266万
展开全部
//先声明,或者实现提前
char change(char *p);
void main()
{
int i=0;
char ch,a[100];
while((ch=getchar())!='.')
a[i++]=ch;
a[i]='\0';
change(a);
puts(a);
}
char change(char *p)
{
bool first = true;//设一个标志标识最开始字母
while(*p!='\0')
{
if(*(p)>='a'&&*(p)<='z'&&(first||*(p-1)==' '))
*(p)-=32;
p++;
first = false;
}
return *(p+1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
l121432711
2010-05-28 · 贡献了超过113个回答
知道答主
回答量:113
采纳率:0%
帮助的人:28.3万
展开全部
#include<stdio.h>
void main()
{
int i=0;
char ch,a[100],*p;
while((ch=getchar())!='.')
a[i++]=ch;
a[i]='\0';
p=a;
while(*p!='\0')
{
if(*(p+1)>='a'&&*(p+1)<='z'&&*p==' ')
*(p+1)-=32;
p++;
}
puts(a);
} 你这样试试!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式