鱼C论坛

 找回密码
 立即注册
查看: 2049|回复: 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";  // 你这样在栈上分配,多好,就没那么多限制了

还有几个小问题稍微改了下:
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:如果程序还有问题再讨论
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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:如果程序还有问题再讨论
想知道小甲鱼最近在做啥?请访问 -> 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-11-27 15:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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