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

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

文章目录

一、strcmp 函数

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

二、完整代码示例





一、strcmp 函数


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


strcmp 函数 :


#include <string.h>
 int __cdecl strcmp(const char *_Str1,const char *_Str2);


_Str1 < _Str2 : 返回负数 ;

_Str1 = _Str2 : 返回0 ;

_Str1 > _Str2 : 返回正数 ;





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


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


 

// 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
    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;
            }
        }
    }


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






二、完整代码示例


代码示例 :


#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;
}


执行结果 :

image.png


目录
相关文章
|
16天前
|
C语言
C语言:内存函数(memcpy memmove memset memcmp使用)
C语言:内存函数(memcpy memmove memset memcmp使用)
|
1天前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
9 2
|
4天前
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
10 0
|
4天前
|
C语言
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
6 0
|
5天前
|
C语言
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
11 0
|
5天前
|
C语言
【C语言/数据结构】排序(直接插入排序|希尔排序)
【C语言/数据结构】排序(直接插入排序|希尔排序)
12 4
|
10天前
|
缓存 安全 编译器
【C 言专栏】C 语言函数的高效编程技巧
【5月更文挑战第1天】本文探讨了C语言中函数的高效编程技巧,包括函数的定义与作用(如代码复用和提高可读性)、设计原则(单一职责和接口简洁)、参数传递方式(值传递、指针传递和引用传递)、返回值管理、调用约定、嵌套与递归调用,以及函数优化技巧和常见错误避免。掌握这些技巧能提升C语言代码的质量和效率。
【C 言专栏】C 语言函数的高效编程技巧
|
12天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
12天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
|
12天前
|
C语言
(浙大版《C语言程序设计(第3版)》 习题6-5 使用函数验证哥德巴赫猜想 (20分)
(浙大版《C语言程序设计(第3版)》 习题6-5 使用函数验证哥德巴赫猜想 (20分)