一道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);
}
但是这是错误的 请问高手我哪点错了以及该怎么解决!谢谢了 ~!!!! 展开
我编程如下:
#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);
}
但是这是错误的 请问高手我哪点错了以及该怎么解决!谢谢了 ~!!!! 展开
5个回答
展开全部
#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);
}
#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);
}
展开全部
首先,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);
}
其次,你的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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);
}
帮你改好了 我要分
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);
}
帮你改好了 我要分
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//先声明,或者实现提前
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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);
} 你这样试试!
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);
} 你这样试试!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询