工科男 发表于 2016-7-29 22:55:58

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

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

自认为看了好久的指针,结果拿书做一个练习题,满满的都是打击。
请大神帮我看一下,这个程序错在哪里了。
我主要是想定义一个二维数组,用来存放字符串,
然后利用 strlen 函数比较字符串的长度。
但是电脑奔溃了了、。
指针,想说爱你不容易啊。
主函数没有什么问题
主函数如下:
#include <stdio.h>
#include <string.h>
int main ()
{
        void swap(char (*),int);    //声明一个子函数,比较字符串大小
        char (*p);                  //定义一个数组指针
        char str;             //定义一个子二维字符数组,用于3个字符串的存放
        int i ;
        p=str;
        printf("input three strings:\n");
        for(i=0;i<3;i++)
                gets(str);            //用gets函数输入字符串
        swap(str,3);
        for(i=0;i<3;i++)
                printf("%s ",*p++);

        return 0;
}
请大家帮我看一下以下两个关于字符串大小比较的子函数的编写方法
第一种
子函数编写方法
利用赋值语句:
void swap(char (*x),int n)
{
   
        int i,j,k;
        char q100];                           //我也试过用 char (*q)来定义
        for (i=0;i<n-1;i++)               //但是也是错误,求解错误原因
        {
                k=i;
                for(j=i+1;j<n;j++)
                        if((int)strlen(*(x+k))<(int)strlen(*(x+j)))
                                k=j;                     
                        if(k!=i);
                        {        q=*(x+i);          //问题就出在 if 语句这里了,
                          (x+i)=*(x+k);      //编译的时候,总是提示left operand must be l-value   
                          *(x+k)=q;             //翻译过来,就是左值必须是变量。我不清楚哪里出错了。
                        }                               //求解错因。
        }
}




第二种
子函数编写方法:
利用strcmp函数
void swap(char (*x),int n)
{
    int i,j,k;
char q;
        for (i=0;i<n-1;i++)
        {
                k=i;
                for(j=i+1;j<n;j++)
                        if((int)strlen(*(x+k))<(int)strlen(*(x+j)))
                                k=j;                     
                        if(k!=i);
                        {       
                                strcpy(q,*(x+i));
                                strcpy(*(x+i),*(x+k));            //这一种编写方法运行结果正常      
                                strcpy(*(x+k),q);
                        }
}
}

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

qq1242009750 发表于 2016-7-30 13:30:58

是要用到双重解引用吗?*(*(x)+ k) 这样吗??x代表行 k代表列

工科男 发表于 2016-7-30 18:22:19

qq1242009750 发表于 2016-7-30 13:30
是要用到双重解引用吗?*(*(x)+ k) 这样吗??x代表行 k代表列

我要对字符串进行处理,应该不会用到双重吧。

qq1242009750 发表于 2016-7-30 18:23:55

工科男 发表于 2016-7-30 18:22
我要对字符串进行处理,应该不会用到双重吧。

不能直接 字符串和字符串 进行比较啊,,只能一个字符和一个字符这样

工科男 发表于 2016-7-30 20:29:49

qq1242009750 发表于 2016-7-30 18:23
不能直接 字符串和字符串 进行比较啊,,只能一个字符和一个字符这样

利用strlen函数计算字符串长度,或者strcmp函数对字符串直接进行比较,都是可以的,只是现在我的程序,满足不了我的想法了
页: [1]
查看完整版本: 利用指针对字符串比较排序问题