[C语言] 字符串常量可以反转吗?

[复制链接]
1282|11
 楼主| yanghelovehuang 发表于 2018-7-19 16:32 | 显示全部楼层 |阅读模式
本帖最后由 yanghelovehuang 于 2018-7-23 14:45 编辑

平时说的字符串反转好像都是反转的字符串数组,请问下字符串常量可以反转吗? 具体方法?
ayb_ice 发表于 2018-7-19 17:11 | 显示全部楼层
什么叫字符串反转,
我还真不知道
字符串都是按字节顺序保存的,为什么要反转,有意义吗
linqing171 发表于 2018-7-19 21:04 | 显示全部楼层
c#里面的字符串类有个reverse函数。
如果是字符数组,可以 for(i=0;i<len/2;i++) {t=a[i];a[i]=a[len-1-i];a[len-1-i]=t;}
如果是翻转到另外一个数组里  for(i=0;i<len;i++) b[i]=a[len-i-1];
junyee 发表于 2018-7-23 11:54 | 显示全部楼层
linqing171 发表于 2018-7-19 21:04
c#里面的字符串类有个reverse函数。
如果是字符数组,可以 for(i=0;i

第二个方法可以用异或..


  1. for(i=0,j=LEN-1;  j>i ; i++,j--){
  2.   str[i]= str[i] ^ str[j];
  3.   str[j]= str[i] ^ str[j];
  4.   str[i]= str[i] ^ str[j];
  5. }


linqing171 发表于 2018-7-23 12:41 | 显示全部楼层
junyee 发表于 2018-7-23 11:54
第二个方法可以用异或..

你的这个LEN-1只计算了一次,后续是用的++和-- 有时候能节省计算量。
你这个用亦或,节省了一个临时变量。有些编译器在窥孔优化阶段也能生成出此类代码来。
 楼主| yanghelovehuang 发表于 2018-7-23 14:44 | 显示全部楼层
ayb_ice 发表于 2018-7-19 17:11
什么叫字符串反转,
我还真不知道
字符串都是按字节顺序保存的,为什么要反转,有意义吗 ...

这是面试考察指针知识,数组等的题,就和上学学的都没用一样,但是必须知道
 楼主| yanghelovehuang 发表于 2018-7-23 14:46 | 显示全部楼层
linqing171 发表于 2018-7-19 21:04
c#里面的字符串类有个reverse函数。
如果是字符数组,可以 for(i=0;i

这个我知道 一半反转的都是字符数组,我是想知道字符串常量可以反转吗?
junyee 发表于 2018-7-23 19:13 | 显示全部楼层
yanghelovehuang 发表于 2018-7-23 14:46
这个我知道 一半反转的都是字符数组,我是想知道字符串常量可以反转吗? ...

常量就是任何时刻都不能修改的 "变量".
airwill 发表于 2018-7-23 19:24 | 显示全部楼层
反转, 曾经在 ARM 的指令里有个字反转. 就是按位颠倒过来.
若依次推论, 那么字符串反转, 是前后对调比较好理解一点.
但也可能每个字符的高低位也要颠倒过来呢?
所以, 这个定义不明确的
 楼主| yanghelovehuang 发表于 2018-7-24 10:10 | 显示全部楼层
junyee 发表于 2018-7-23 19:13
常量就是任何时刻都不能修改的 "变量".

我测试了下,
char *s = "fsfsgds",
printf("%c", *s);
s++;
printf("%c", *s);
结果是fs。
那我们把两个*s交换位置不就互换了吗
 楼主| yanghelovehuang 发表于 2018-7-24 16:11 | 显示全部楼层
fxmxh 发表于 2018-7-24 11:03
abcd=dcba么?常量就是常量,看你本来的意思就是把一个字符串转变成另一个顺序与之相反的另一个字符串。不 ...

谢谢啊 大神们
junyee 发表于 2018-7-26 13:06 | 显示全部楼层
yanghelovehuang 发表于 2018-7-24 10:10
我测试了下,
char *s = "fsfsgds",
printf("%c", *s);

我不知道你要说明的是什么?
---
*s:      :  fsfsgds
*(s++) :  fsfsgds
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

324

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部