ZMr.Almost 发表于 2016-11-14 22:03:38

不分配额外空间,如何实现字符串逆序

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

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;
}

n0noper 发表于 2016-11-15 00:13:36

你的功能我没测试,但是发现一个问题:

char *a = "1234";

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

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

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


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

      p=r=s;


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

      }
      p--;

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


int main()
{
      char *x ;
      char *y ;
//                char *a = "1234";
      char a[]= "1234";
      x = a;
      reverse(x);
//      printf("x:%s",*x);
                printf("x:%s",x);
      getchar();
      return 0;
}

PS:如果程序还有问题再讨论

ZMr.Almost 发表于 2016-11-15 09:16:09

n0noper 发表于 2016-11-15 00:13
你的功能我没测试,但是发现一个问题:

char *a = "1234";


非常感谢!我再仔细研读一下!
页: [1]
查看完整版本: 不分配额外空间,如何实现字符串逆序