c语言实现大写字符串转换成小写,代码有问题,求高手指点
答案:4 悬赏:50
解决时间 2021-03-07 02:15
- 提问者网友:未信
- 2021-03-06 02:30
c语言实现大写字符串转换成小写,代码有问题,求高手指点
最佳答案
- 二级知识专家网友:十鸦
- 2021-03-06 02:51
#include
#include
#include
char a[] = "aAd";
char *strlwrr(char *st);
void main()
{
strlwrr(a);
printf("%s", a);
system("pause");
}
char *strlwrr(char *st)
{
char ptr[5];
int i = 0;
strcpy(ptr,st);
//prt和st指不是同一空间
while (i<=5)
{
if((ptr[i] <= 'Z') && (ptr[i] >= 'A'))
st[i] = st[i] + 32;
i++;
}
return st;
}
#include
#include
char a[] = "aAd";
char *strlwrr(char *st);
void main()
{
strlwrr(a);
printf("%s", a);
system("pause");
}
char *strlwrr(char *st)
{
char ptr[5];
int i = 0;
strcpy(ptr,st);
//prt和st指不是同一空间
while (i<=5)
{
if((ptr[i] <= 'Z') && (ptr[i] >= 'A'))
st[i] = st[i] + 32;
i++;
}
return st;
}
全部回答
- 1楼网友:摆渡翁
- 2021-03-06 05:59
return st错误,没有返回ptr的值
- 2楼网友:末日狂欢
- 2021-03-06 04:45
应该是while(i<=2)
或者改成while(ptr[i]!='\0')
追问:不对。。打出来的仍然是奇怪的字符
或者改成while(ptr[i]!='\0')
追问:不对。。打出来的仍然是奇怪的字符
- 3楼网友:琴狂剑也妄
- 2021-03-06 03:41
你将你的字符串复制到ptr上然后再对ptr做修改当然不能达到目的了
因为你要改的是st然而你改的却是ptr
这里的ptr是你复制出来的并不是指向你的st
所以完全不用定义那ptr
#include "stdio.h"
char a[]="aAd";
char *strlwrr(char *st);
int main(void)
{
printf("%s\n",strlwrr(a));
return 0;
}
char *strlwrr(char *st)
{
int i=3;
while(i)
{
if(st[i]<='Z'&&st[i]>='A')
st[i]+=32;
i--;
}
return st;
}
这样就可以了追答
追问:你说的有道理,但是我把return st改成return ptr为什么还是不对呢?我有点糊涂了。。
追答:郁闷了,回答都被采纳了我竟然还能提交答案
好吧,首先你要看下你的ptr是在哪个函数里声明定义并使用的
对,是你的strlwrr函数里
当你退出该函数的时候该函数便已由系统释放掉
所以你返回的ptr的地址内容已经被释放了
所以你引用了一个非法的地址
当然没有作用
----------------------------------------------------------------------------------------------
还真能回复啊- -
补充一下:
事实上你这个程序不需要返回一个值的
因为你的a是全局变量
在主函数输出中使用printf("%s\n",a);就可以了
追问:哦!豁然开朗呐。。太谢谢了,你也是大神~可惜不能有两个满意答案。。
追答:我不是什么大神.............................................
因为你要改的是st然而你改的却是ptr
这里的ptr是你复制出来的并不是指向你的st
所以完全不用定义那ptr
#include "stdio.h"
char a[]="aAd";
char *strlwrr(char *st);
int main(void)
{
printf("%s\n",strlwrr(a));
return 0;
}
char *strlwrr(char *st)
{
int i=3;
while(i)
{
if(st[i]<='Z'&&st[i]>='A')
st[i]+=32;
i--;
}
return st;
}
这样就可以了追答
追问:你说的有道理,但是我把return st改成return ptr为什么还是不对呢?我有点糊涂了。。
追答:郁闷了,回答都被采纳了我竟然还能提交答案
好吧,首先你要看下你的ptr是在哪个函数里声明定义并使用的
对,是你的strlwrr函数里
当你退出该函数的时候该函数便已由系统释放掉
所以你返回的ptr的地址内容已经被释放了
所以你引用了一个非法的地址
当然没有作用
----------------------------------------------------------------------------------------------
还真能回复啊- -
补充一下:
事实上你这个程序不需要返回一个值的
因为你的a是全局变量
在主函数输出中使用printf("%s\n",a);就可以了
追问:哦!豁然开朗呐。。太谢谢了,你也是大神~可惜不能有两个满意答案。。
追答:我不是什么大神.............................................
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯