鱼C论坛

 找回密码
 立即注册
查看: 1962|回复: 2

[已解决]不分配额外空间,如何实现字符串逆序

[复制链接]
发表于 2016-11-14 22:03:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
逆序输出采用异或方式,但是在处理字符串流时,报错,求指导

char* reverse(char *s)
{
        char *p,*r;

        p=r=s;


        while('\0' != *p)
        {
                printf("%c\n",*p);
                p++;

        }
        p--;

        if(r < p)
        {
                *r = *r ^ *p;
                *p = *r ^ *p;
                *r = *r ^ *p;
                r++;
                p--;
               
        }
        return s;
}

char* reverse(char *s);
int main()
{
        char *x ;
        char *y ;
        char *a= "1234";
        x = a;
        reverse(x);
        printf("x:%s",*x);
        getchar();
        return 0;
}
最佳答案
2016-11-15 00:13:36
你的功能我没测试,但是发现一个问题:

char *a = "1234";

这里a指向一个常量区,你非要去改,那就尴尬了。

建议:char a[] = "1234";  // 你这样在栈上分配,多好,就没那么多限制了

还有几个小问题稍微改了下:


  1. char* reverse(char *s)
  2. {
  3.         char *p,*r;

  4.         p=r=s;


  5.         while('\0' != *p)
  6.         {
  7.                 printf("%c\n",*p);
  8.                 p++;

  9.         }
  10.         p--;

  11. //        if(r < p)
  12.                 while(r < p)
  13.         {
  14.                 *r = *r ^ *p;
  15.                 *p = *r ^ *p;
  16.                 *r = *r ^ *p;
  17.                 r++;
  18.                 p--;
  19.                
  20.         }
  21.         return s;
  22. }


  23. int main()
  24. {
  25.         char *x ;
  26.         char *y ;
  27. //                char *a = "1234";
  28.         char a[]= "1234";
  29.         x = a;
  30.         reverse(x);
  31. //        printf("x:%s",*x);
  32.                 printf("x:%s",x);
  33.         getchar();
  34.         return 0;
  35. }
复制代码


PS:如果程序还有问题再讨论
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-15 00:13:36 | 显示全部楼层    本楼为最佳答案   
你的功能我没测试,但是发现一个问题:

char *a = "1234";

这里a指向一个常量区,你非要去改,那就尴尬了。

建议:char a[] = "1234";  // 你这样在栈上分配,多好,就没那么多限制了

还有几个小问题稍微改了下:


  1. char* reverse(char *s)
  2. {
  3.         char *p,*r;

  4.         p=r=s;


  5.         while('\0' != *p)
  6.         {
  7.                 printf("%c\n",*p);
  8.                 p++;

  9.         }
  10.         p--;

  11. //        if(r < p)
  12.                 while(r < p)
  13.         {
  14.                 *r = *r ^ *p;
  15.                 *p = *r ^ *p;
  16.                 *r = *r ^ *p;
  17.                 r++;
  18.                 p--;
  19.                
  20.         }
  21.         return s;
  22. }


  23. int main()
  24. {
  25.         char *x ;
  26.         char *y ;
  27. //                char *a = "1234";
  28.         char a[]= "1234";
  29.         x = a;
  30.         reverse(x);
  31. //        printf("x:%s",*x);
  32.                 printf("x:%s",x);
  33.         getchar();
  34.         return 0;
  35. }
复制代码


PS:如果程序还有问题再讨论
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-11-15 09:16:09 | 显示全部楼层
n0noper 发表于 2016-11-15 00:13
你的功能我没测试,但是发现一个问题:

char *a = "1234";

非常感谢!我再仔细研读一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 04:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表