首页 新闻 会员 周边

C语言 如何输入一个字符串,将他倒序输出(输入的字符串可能是无限长的,不能确定,能不能不用数组输入~~~

0
悬赏园豆:10 [已解决问题] 解决于 2015-08-29 00:22

/*实在是不想用数组来解决这个问题,应为会消耗过多的资源*/
#include <stdio.h>
#include <string.h>
char strlen_MM(char *s);
main(void)
{
char i;
char DATA,Num=0;
printf("please input a String\n");
scanf("%s",&DATA);
Num=strlen_MM(&DATA);//
//char Inverse[Num];//这里也无法定义

???
printf("%d",Num);
return 0;
}
char strlen_MM(char *s)
{
char i=0;
while(*(s+i))
{
i++;
}
return i;
}

各路大神帮帮我吧!!

小淼博客的主页 小淼博客 | 菜鸟二级 | 园豆:359
提问于:2015-08-19 14:17
< >
分享
最佳答案
0

获取数组末元素的方法: *(*(&str+1)-1)

头指针 char *begin = str  

尾指针 char *end    =  *(&str+1)-1

接下来:

while( --end >= begin ){ printf("%c",*end); }

收获园豆:10
葡萄不吐皮 | 菜鸟二级 |园豆:260 | 2015-08-19 16:39

刚试了一下,感觉有点问题,程序在while那块直接跳过了,没有运行,char *end    =  *(&str+1)-1这个赋值有问题玛?编译出错了,应该是吧char 型数据赋给地址了~~,不过还是谢谢了

小淼博客 | 园豆:359 (菜鸟二级) | 2015-08-19 20:24

@小淼博客: 数组可以这么用,字符串常量不行,比如:char str[]="ABCD";上面的结果就是DCBA

葡萄不吐皮 | 园豆:260 (菜鸟二级) | 2015-08-20 11:15

@葡萄不吐皮: 哦哦,懂你的意思了,数组应该行的,谢谢

小淼博客 | 园豆:359 (菜鸟二级) | 2015-08-20 12:35
其他回答(1)
1

获取字符的长度,指针一直移到最后,再输出回移

稳稳的河 | 园豆:4216 (老鸟四级) | 2015-08-19 14:35

多谢了,试了一下基本上可行,但是有点小bug,倒序输出的字符串中老是会出现一个错误的字符,不知道为什么~~代码如下:

#include <stdio.h>
#include <string.h>
char strlen_MM(char *s);
main(void)
{
char i;
char DATA,Num=0;
printf("please input a String\n");
scanf("%s",&DATA);
Num=strlen_MM(&DATA);
char *P=&DATA+Num-1;
for(i=0;i<Num;i++)
{
printf("%c",*(P-i));
}
printf("%d",Num);
return 0;
}
char strlen_MM(char *s)
{
char i=0;
while(*(s+i))
{
i++;
}
return i;
}

支持(0) 反对(0) 小淼博客 | 园豆:359 (菜鸟二级) | 2015-08-19 20:22

对了,刚试了一下,当输入的字符串长度大于4的时候才会出现这个情况~这是个啥情况呢?

支持(0) 反对(0) 小淼博客 | 园豆:359 (菜鸟二级) | 2015-08-19 20:27

@小淼博客: char DATA 你声明的DATA只能保存1个字符,你输入ABCDEFGHIJK,只有'A'被保存在DATA

支持(0) 反对(0) 葡萄不吐皮 | 园豆:260 (菜鸟二级) | 2015-08-20 11:12

@葡萄不吐皮: 我申明的char DATA只是一个地址的位置,地址是存在DATA里面的,当用scanf之后就会将字符串的首地址存在DATA里面而不是把数据存在里面,数据是存在以&DATA为首地址的内存空间的吧~~,所以就不存在char DATA型变量大小不够呀---

支持(0) 反对(0) 小淼博客 | 园豆:359 (菜鸟二级) | 2015-08-20 11:37

@小淼博客: 很遗憾,不是这样。

支持(0) 反对(0) 葡萄不吐皮 | 园豆:260 (菜鸟二级) | 2015-08-20 15:32

@葡萄不吐皮: 那既然char DATA只能保存一个字符,为啥后面的地址里会存储我输入的字符串呢?既然DATA只保存了我的数据‘A’,为啥后面还能正常输出‘KJIHGF?DCBA’呢?比如像这段程序:

char s[3];
scanf("%s",s);
printf("%s",s);

你告诉了scanf函数你的输入类型以及存储的首地址,数组的起始地址s,函数就会自动将字符串中的每个字符输入到以s为首地址的存储空间中,再输出出来就是没问题的呀~

支持(0) 反对(0) 小淼博客 | 园豆:359 (菜鸟二级) | 2015-08-22 10:32

@小淼博客: 就因为char DATA只能保存一个字符,所以只有'A'被保存,后面的地址数据是不确定的。为什么能输出那些字符我也不太清楚,估计跟编译器的实现方式有关。

char s[3];这里你声明的是一个字符数组,编译器会分配相应的内存空间,这样输入的字符就会被保存了。

支持(0) 反对(0) 葡萄不吐皮 | 园豆:260 (菜鸟二级) | 2015-08-25 14:50

@葡萄不吐皮: 恩恩,我懂了,谢谢你了!

支持(0) 反对(0) 小淼博客 | 园豆:359 (菜鸟二级) | 2015-08-28 23:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册