鱼C论坛

 找回密码
 立即注册
查看: 3480|回复: 4

利用指针对字符串比较排序问题

[复制链接]
发表于 2016-7-29 22:55:58 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 工科男 于 2016-7-30 20:32 编辑

自认为看了好久的指针,结果拿书做一个练习题,满满的都是打击。
请大神帮我看一下,这个程序错在哪里了。
我主要是想定义一个二维数组,用来存放字符串,
然后利用 strlen 函数比较字符串的长度。

但是电脑奔溃了了、。

指针,想说爱你不容易啊。
主函数没有什么问题
  1. 主函数如下:
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main ()
  5. {
  6.         void swap(char (*)[100],int);    //声明一个子函数,比较字符串大小
  7.         char (*p)[100];                  //定义一个数组指针
  8.         char str[3][100];             //定义一个子二维字符数组,用于3个字符串的存放
  9.         int i ;
  10.         p=str;
  11.         printf("input three strings:\n");
  12.         for(i=0;i<3;i++)
  13.                 gets(str[i]);            //用gets函数输入字符串
  14.         swap(str,3);
  15.         for(i=0;i<3;i++)
  16.                 printf("%s ",*p++);

  17.         return 0;
  18. }
复制代码

请大家帮我看一下以下两个关于字符串大小比较的子函数的编写方法
  1. 第一种
  2. 子函数编写方法
  3. 利用赋值语句:
  4. void swap(char (*x)[100],int n)
  5. {
  6.    
  7.         int i,j,k;
  8.         char q100];                           //我也试过用 char (*q)[100]来定义
  9.         for (i=0;i<n-1;i++)               //但是也是错误,求解错误原因
  10.         {
  11.                 k=i;
  12.                 for(j=i+1;j<n;j++)
  13.                         if((int)strlen(*(x+k))<(int)strlen(*(x+j)))
  14.                                 k=j;                       
  15.                         if(k!=i);
  16.                         {        q=*(x+i);          //问题就出在 if 语句这里了,
  17.                             (x+i)=*(x+k);        //编译的时候,总是提示left operand must be l-value     
  18.                             *(x+k)=q;             //翻译过来,就是左值必须是变量。我不清楚哪里出错了。
  19.                         }                               //求解错因。
  20.         }
  21. }
复制代码



  1. 第二种
  2. 子函数编写方法:
  3. 利用strcmp函数
  4. void swap(char (*x)[100],int n)
  5. {
  6.     int i,j,k;
  7. char q[100];
  8.         for (i=0;i<n-1;i++)
  9.         {
  10.                 k=i;
  11.                 for(j=i+1;j<n;j++)
  12.                         if((int)strlen(*(x+k))<(int)strlen(*(x+j)))
  13.                                 k=j;                       
  14.                         if(k!=i);
  15.                         {       
  16.                                 strcpy(q,*(x+i));
  17.                                 strcpy(*(x+i),*(x+k));            //这一种编写方法运行结果正常        
  18.                                 strcpy(*(x+k),q);
  19.                         }
  20. }
  21. }
复制代码


请大家伙帮我重点看一下,差别好像只有16,17,18行。第一种方法错在哪里了,应该如何改正,望告知。因为那是我编写的。先谢谢大家啦

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-30 13:30:58 | 显示全部楼层
是要用到双重解引用吗?  *(*(x)+ k) 这样吗??  x代表行 k代表列
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-30 18:22:19 | 显示全部楼层
qq1242009750 发表于 2016-7-30 13:30
是要用到双重解引用吗?  *(*(x)+ k) 这样吗??  x代表行 k代表列

我要对字符串进行处理,应该不会用到双重吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-30 18:23:55 | 显示全部楼层
工科男 发表于 2016-7-30 18:22
我要对字符串进行处理,应该不会用到双重吧。

不能直接 字符串和字符串 进行比较啊,,只能一个字符和一个字符这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-30 20:29:49 | 显示全部楼层
qq1242009750 发表于 2016-7-30 18:23
不能直接 字符串和字符串 进行比较啊,,只能一个字符和一个字符这样

利用strlen函数计算字符串长度,或者strcmp函数对字符串直接进行比较,都是可以的,只是现在我的程序,满足不了我的想法了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-14 15:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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