一道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);
}

但是这是错误的 请问高手我哪点错了以及该怎么解决!谢谢了 ~!!!!

#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);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-28
首先,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);
}
第2个回答  2010-05-28
#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);
}
帮你改好了 我要分
第3个回答  2010-05-28
//先声明,或者实现提前
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);
}
第4个回答  2010-05-28
#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);
} 你这样试试!
相似回答