字符串降序排列不用冒泡法大佬们帮我看下这样为什么不行

manch1n 2017-12-14 11:38:38
/**********
【习题8.015】对长度为n的字符串s1,除首、尾字符外,将
其余字符按ASCII码降序排列,组合成一个新的字符串s2。
**********/
void func(char *s1, char *s2, int n)
/* s1为字符串的起始地址,
s2为新字符串的起始地址,
n为字符串的长度。
要求:s1串不能发生改变,
s2串存放新的字符串。
*/
{int i,j;
char *max,*p1=s1;
for(i=1;i<=n;i++,max++)
for(j=1;j<n-1;j++,p++) {*max=*p1>=*(p1+1)? *p1:*(p1+1);}
s2=max;

}
...全文
145 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-12-14
  • 打赏
  • 举报
回复
void func(char *s1, char *s2 int n)
    /* s1为字符串的起始地址,
       s2为新字符串的起始地址,
       n为字符串的长度。
       要求:s1串不能发生改变,
       s2串存放新的字符串。
       */
{

    for (i = 0; i < n; ++i)    /*将字符拷贝至s2,后面对s2排序*/
        s2[i] = s1[i];
 /*对s2进行冒泡排序,除了首字符和尾字符。*/
    for (i = 1; i < n - 1; i++)
        for (j = 1; j < n - 1 -i - 1; j++)
            if (s2[j] > s2[j+1]) {
                char tmp = s2[j];
                s2[j] = s2[j+1];
                s2[j+1] = tmp;
            }
#if 0
    int i,j;
    char *max,*p1=s1;

    for(i=1;i<=n;i++,max++)
        for(j=1;j<n-1;j++,p++) {*max=*p1>=*(p1+1)? *p1:*(p1+1);}
    s2=max;
#endif
}
参考一下吧; s2接收的实参是数组(或动态malloc申请的空间);
自信男孩 2017-12-14
  • 打赏
  • 举报
回复
建议提供一下实参,从形参看到都是指针,不清楚实参是数组还是指针。
sky065530 2017-12-14
  • 打赏
  • 举报
回复
max没有分配内存,肯定会崩掉,

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧