免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: g9527j
打印 上一主题 下一主题

<<C和指針>>一道題 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-04-06 21:34 |只看该作者
学习中,为何不写main函数啊,

论坛徽章:
0
12 [报告]
发表于 2006-04-07 00:37 |只看该作者
原帖由 黑苦咖啡 于 2006-4-6 14:27 发表
Void reverse_string(char *string)
{
        char *start = string;
        char *end = string;
        char temp;
        while(*end++) ;
        end--;
        for( ;start<end;start++,end--){
                temp = *start;
                *start = *end;
...


写的不错,改正一个错误,加上简化一下

  1. void reverse(char *s)
  2. {
  3.         char *e = s;

  4.         while (*e) e++;

  5.         for (e--; s<e; s++,e--) {
  6.                 *s ^= *e;
  7.                 *e ^= *s;
  8.                 *s ^= *e;
  9.         }      
  10. }
复制代码

论坛徽章:
0
13 [报告]
发表于 2006-04-07 11:17 |只看该作者
原帖由 黑苦咖啡 于 2006-4-6 14:27 发表
Void reverse_string(char *string)
{
        char *start = string;
        char *end = string;
        char temp;
        while(*end++) ;
        end--;
        for( ;start<end;start++,end--){
                temp = *start;
                *start = *end;
...



好好的一个思路哦!!!学习一下!!!呵呵,不过,确实有一个小问题, 就是在end--;之后 还应该再end--;一次。
因为end在循环到字串结束的时候已经指到'\0'的下一个地址上了,这样的话回退指针end--指的位置也是'\0'的位置,直接赋值给temp,temp再给end的时候,*end就是'\0'.字串第一个字符是'\0'还怎么能够输出后面的东西呢?
所以我觉得回退的时候应该回退两次。

另外楼上的看到问题可能和我想的是一样的,但在在代码里却也少写了一次end--,不过我即使加上了end--,你的结果也不全,只有其中的一部分,但由于我没有用过^=,所以不敢妄加评论。

[ 本帖最后由 hanbing5299 于 2006-4-7 11:19 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2006-04-07 12:37 |只看该作者
原帖由 hanbing5299 于 2006-4-7 11:17 发表



好好的一个思路哦!!!学习一下!!!呵呵,不过,确实有一个小问题, 就是在end--;之后 还应该再end--;一次。
因为end在循环到字串结束的时候已经指到'\0'的下一 ...


while (*end++);

while (*end) end++;
可不一样哦

论坛徽章:
0
15 [报告]
发表于 2006-04-07 13:16 |只看该作者
哦???指点一下呗?另外,^=这样的写法是异或么???为什么你的结果会不对呢?

论坛徽章:
0
16 [报告]
发表于 2006-04-07 15:13 |只看该作者

回复 14楼 seeLnd 的帖子

while (*end++);

while (*end) end++;
可不一样哦


能解释一下为什么吗?真的想不通!

论坛徽章:
0
17 [报告]
发表于 2006-04-08 11:13 |只看该作者
回去想了一下,想通了,就是先取值的问题。

论坛徽章:
0
18 [报告]
发表于 2006-04-08 14:14 |只看该作者
还有为什么会有段错误,
...
   *start = *end;
...
不明白?!

论坛徽章:
0
19 [报告]
发表于 2007-09-26 16:02 |只看该作者
hanbing5299  是对的

void reverse_string(char *string)
{
        char *start = string;
        char *end = string;
        char temp;
        while(*end++) ;
        end--;
        end--;
        for( ;start<end;start++,end--){
                temp = *start;
                *start = *end;
                *end = temp;
        }
}

论坛徽章:
0
20 [报告]
发表于 2007-09-26 16:17 |只看该作者
不能申请临时空间,只好用XOR了。
  1. void reverse_string(char *buf)
  2. {
  3.     char *p, *q;

  4.     p = buf;
  5.     while(*p)
  6.         p++;

  7.     q = buf;
  8.     while(q < p)
  9.     {
  10.         p--;
  11.         *q ^= *p;
  12.         *p ^= *q;
  13.         *q ^= *p;
  14.         q++;
  15.     }
  16. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP