前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )

【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )

作者头像
韩曙亮
发布2023-03-29 21:30:01
发布2023-03-29 21:30:01
70600
代码可运行
举报
运行总次数:0
代码可运行

文章目录

一、strcmp 函数


strcmp 是 String Compare 缩写 , 该函数用于比较两个字符串 ;

strcmp 函数 :

代码语言:javascript
代码运行次数:0
运行
复制
#include <string.h>
 int __cdecl strcmp(const char *_Str1,const char *_Str2);
  • _Str1 < _Str2 : 返回负数 ;
  • _Str1 = _Str2 : 返回0 ;
  • _Str1 > _Str2 : 返回正数 ;

二、指针数组排序 ( 字符串排序 )


指针数组 中的每个元素都是 指向 字符串的指针 , 通过 strcmp 函数对字符串进行排序 , 代码如下 :

代码语言:javascript
代码运行次数:0
运行
复制
    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    for(i = 0; i < num; i++)
    {
        for(j = i; j < num; j++)
        {
            // 核心逻辑 : 如果 array[i] 大于 array[j]
            //          就交换两个元素
            if(strcmp(array[i], array[j]) > 0)
            {
                // 交换 i, j 位置的指针变量
                tmp = array[i];
                array[i] = array[j];
                array[j] = tmp;
            }
        }
    }

上述代码是将字符串有小到大进行排序 ;

二、完整代码示例


代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



void main()
{
    // 循环控制变量
    int i = 0, j = 0;
    // 数组大小
    int num = 0;
    // 排序时 , 交换指针变量时的临时变量
    char *tmp;

    /*
     * 复杂指针阅读
     * 参考 https://blog.csdn.net/shulianghan/article/details/121453520 和
     * https://hanshuliang.blog.csdn.net/article/details/78568351#3____________________2803
     * 博客章节进行阅读
     *
     * 复杂指针解析流程 :
     * 1. 中心标识符是 array
     * 2. 先往右看 , 遇到 [] , 说明这是一个数组 , 挖掉 array[] 内容 , 然后调转方向往左看
     * 3. 发现是 * , 说明数组中的元素是指针 , 挖掉 * , 往右看没内容 , 往左看
     * 4. 发现是 char , 说明指针指向的数据是 char 类型
     *
     * array 是一个数组 , 数组中的元素的 char * 字符串
     *
     * 这是 指针数组 , 数组元素 是 指针
     */
    char *array[] = {"abc", "123", "258", "sfd"};

    // 计算数组大小
    num = sizeof(array) / sizeof(array[0]);

    // 打印上述数组
    for(i = 0; i < num; i++)
    {
        // 使用 数组下标 与 指针 进行遍历 , 效果相同
        //printf("%s\n", array[i]);
        printf("%s\n", *(array + i));
    }

    // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    for(i = 0; i < num; i++)
    {
        for(j = i; j < num; j++)
        {
            // 核心逻辑 : 如果 array[i] 大于 array[j]
            //          就交换两个元素
            if(strcmp(array[i], array[j]) > 0)
            {
                // 交换 i, j 位置的指针变量
                tmp = array[i];
                array[i] = array[j];
                array[j] = tmp;
            }
        }
    }

    // 打印排序后的数组
    printf("\nSort:\n");
    for(i = 0; i < num; i++)
    {
        // 使用 数组下标 与 指针 进行遍历 , 效果相同
        printf("%s\n", array[i]);
        //printf("%s\n", *(array + i));
    }


    // 命令行不要退出
    system("pause");
    return;
}

执行结果 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、strcmp 函数
  • 二、指针数组排序 ( 字符串排序 )
  • 二、完整代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档