| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8353 人关注过本帖
标题:题目是:在主函数输入十个等长的字符串,用另一函数对他们进行排序,然后在 ...
取消只看楼主 加入收藏
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:7 
题目是:在主函数输入十个等长的字符串,用另一函数对他们进行排序,然后在主函数输出十个排好序的字符串
代码有点长,问题确认出现在函数里,算法粗糙,见谅:
#include <stdio.h>
#include <string.h>
 static void rank(char *p) ;
 int main()
 {
     char str[10][10];
     int i;
     char*p=str[0];
     printf("please input ten strings each has ten characters:\n");
     for(i=0;i<10;i++)
     {
      printf("str%d:",i+1);
     gets(str[i]);
     }
     rank(p);
     printf("After ranking the ten strings are:");
     for(i=0;i<10;i++)
     printf("\nstr%d:%s",i+1,str[i]);
     return 0;
 }
 static void rank(char*p)
 {
     int i,j,k=0;
     char temp[10];
     for(i=0;i<9;i++)//temp是用来作中转的,一个中间值
     {
         k=i;
         for(j=i+1;j<10;j++)
         if(strcmp(*(&p+k),*(&p+j))>0)//只是为了多用下指针知识,所以写成这么麻烦的语句,见谅
         k=j;
         if(k!=i)
         {
             strcpy(temp,*(&p+i));
             strcpy(*(&p+i),*(&p+k));
             strcpy(*(&p+k),temp);
         }
     }
 }
编译不存在问题,但输入完十个字符串后,enter,系统提示   ...exe停止运行,请指出问题在哪
搜索更多相关主题的帖子: please include return 字符串 
2017-02-12 19:47
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 2楼 renkejun1942
额,你的这个方法我弄过,因为有两道一样的题,要求用不同的方法,所以我这次交换内容,只是想拐弯磨脚地多用下指针知识。
所以能否正面回答,就是不改动我的代码,检查下语法错误到底在哪??

............
2017-02-13 15:30
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 4楼 炎天
谢谢答复,但觉得版主考虑失误,犯了低级错误,p+2应该是str[0][2]才对,因为p是列指针。
我运行了如下程序以论证:
#include <stdio.h>
int main()
{
    char str[3][3]={"abe","cdf","ghi"};
    char*p=str[0];
    printf("%s",p+2);
}
如果您说的是对的,那么应该输出ghi,而实际结果是ecdfghi,所以好像错误也不在这,希望版主考虑仔细些,其实我加&p+2是把p转为行指针,指向str[0]所在那行,这样+2后就是str[2]所在那行的地址。

............
2017-02-13 16:48
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 5楼 xzlxzlxzl
版主这想法不错,我决定用你的方法,但还是想知道您把我代码替换的部分,不是和我的等价吗?
for(i=0;i<9;i++)//temp是用来作中转的,一个中间值
     {
         k=i;
         for(j=i+1;j<10;j++)
         if(strcmp(*(&p+k),*(&p+j))>0)//只是为了多用下指针知识,所以写成这么麻烦的语句,见谅
         k=j;
         if(k!=i)
         {
             strcpy(temp,*(&p+i));
             strcpy(*(&p+i),*(&p+k));
             strcpy(*(&p+k),temp);
         }
     }
比如*(&p+k),p原来是列指针,代表str[0][0],加上&变成行指针,代表str[0]所在一行地址,加上k就变成str[k]所在一行的地址,最后加上*将行指针变为列指针,即代表str[k][0],这和版主的p+k*50道理是一样的,只不过我直接采用行指针运算,版主采用列指针运算,我说的哪里错了??

............
2017-02-13 18:36
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 7楼 renkejun1942
额,您说的这个我也知道,如果真的想解答我的问题请看我对5楼的回复吧,相当于我问题浓缩版

............
2017-02-13 18:38
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 5楼 xzlxzlxzl
还有,为什么我将你的50改为我的10,其他和你的一样,然后每行输入十个字母,就会停止运行,而50却不会

............
2017-02-13 20:19
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 11楼 wp231957
为什么,新手不懂,请多指教

............
2017-02-14 14:52
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 13楼 wp231957
谢了,是我对'\0'理解不准确

............
2017-02-15 12:05
快速回复:题目是:在主函数输入十个等长的字符串,用另一函数对他们进行排序,然 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028346 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved