二级指针作为输入的情况

strcmp函数[比较的是两字符串的ASCAII值]
1)字符串1=字符串2,返回0
(2)字符串1 > 字符串2,返回一个正整数
(3)字符串1 < 字符串2,返回一个负整数。

冒泡法的应用:


void printMyarray11(char**myarray,int num)
{

    int i = 0; int j = 0;
    //打印
    for (i = 0; i < num; i++)
    {
        printf("排序前:%s\n", myarray[i]);
    }



}

void mypaixu(char**mystr,int num)
{
    
    char *tmp = NULL;
    int i = 0; int j = 0;
    for (i = 0; i < num; i++)
    {
        for (j = i; j < num; j++)
        {
            if (strcmp(mystr[i], mystr[j]) > 0)
                //1)字符串1=字符串2,返回0
                //(2)字符串1 > 字符串2,返回一个正整数
                //(3)字符串1 < 字符串2,返回一个负整数。
            {
                tmp = mystr[i];//注意  交换的是指针的值
                mystr[i] = mystr[j];
                mystr[j] = tmp;
            }

        }
    }
    return;
}


void main()
{
    int num = 0;
    char*mysrtr[] = { "aaaa","ccc","aaa" };
    num = sizeof(mysrtr) / sizeof(mysrtr[0]);
    printf("排序前:\n");
    printMyarray11(mysrtr,num);

    mypaixu(mysrtr,num);
    printf("排序后:\n");
    printMyarray11(mysrtr,num);
    system("pause");
    return;
}

第二种情况 互换的是内存块
特点:void myoutput(char myArray[10][30],int num)//此处调用(char**mystr,int num)不可行

同理 void mypaixu2(char myArray[10][30],int num)

易错点:
//int num = 0;
//num = sizeof(myArray) / sizeof(myArray[0]);这种写法错误 得出的是[10][30]
(10行30列300个字节)/(sizeof(myArray[0])这时表示的是第一行的列30)所以结果是10;并非是我们想要的4。


void myoutput(char myArray[10][30],int num)//此处调用(char**mystr,int num)不可行
{

    for (int i = 0; i < num; i++)
    {

        printf("%s\n", myArray[i]);
    }
    return;
}

void mypaixu2(char myArray[10][30],int num)
{
    char tmp[30];
    for (int i = 0; i < num; i++)
    {
        for (int j = i; j < num; j++)
        {
            if (strcmp(myArray[i], myArray[j]) > 0)
            {
                strcpy(tmp, myArray[i]);//交换的是内存块
                strcpy(myArray[i], myArray[j]);
                strcpy(myArray[j], tmp);
            }

        }

    }

    return;
}


void main()
{       int num=4;
    char buf[30];
    char myArray[10][30] = { "1111","ddddd","aaaaa","ccccc" };
    char tmp[30];
    
    
    //int num = 0;
    //num = sizeof(myArray) / sizeof(myArray[0]);这种写法错误  得出的是[10][30]
(10行30列300个字节)/(sizeof(myArray[0])这时表示的是第一行的列30)所以结果是10;并非是我们想要的4。
    printf("排序前:\n");
    myoutput(myArray,num);

    mypaixu2(myArray,num);

    printf("排序后:\n");
    myoutput(myArray, num);

    system("pause");
       return;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。