当前位置: 首页 > article >正文

2025-02-27 学习记录--C/C++-PTA 7-30 字符串的冒泡排序

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、题目描述 ⭐️

在这里插入图片描述

二、代码(C语言)⭐️

#include <stdio.h>  // 包含标准输入输出库,用于使用scanf和puts等函数
#include <string.h> // 包含字符串处理库,用于使用strcmp和strcpy等函数
#define N 102       // 定义常量N,表示最多可以存储102个字符串
#define M 12        // 定义常量M,表示每个字符串的最大长度为12(包括字符串结束符'\0')

int main() {        // 主函数,程序的入口
    int n, k;       // 声明两个整型变量n和k,n表示实际输入的字符串数量,k表示排序的轮数
    char strs[N][M]; // 声明一个二维字符数组strs,用于存储最多N个字符串,每个字符串最大长度为M

    scanf("%d %d", &n, &k); // 从标准输入读取n和k的值
    for(int i = 0; i < n; i++) { // 循环n次,读取n个字符串
        scanf("%s", strs[i]);    // 将输入的字符串存储到strs[i]中
    }

    // 冒泡排序
    for(int i = 0; i < k; i++) { // 外层循环,控制排序的轮数,最多进行k轮
        for(int j = 0; j < n - i - 1; j++) { // 内层循环,每一轮比较相邻的两个字符串
            if(strcmp(strs[j], strs[j + 1]) > 0) { // 如果strs[j]大于strs[j + 1]
                char temp[M]; // 声明一个临时字符数组temp,用于交换字符串
                strcpy(temp, strs[j + 1]); // 将strs[j + 1]复制到temp中
                strcpy(strs[j + 1], strs[j]); // 将strs[j]复制到strs[j + 1]中
                strcpy(strs[j], temp); // 将temp中的内容复制到strs[j]中,完成交换
            }
        }
    }

    for(int i = 0; i < n; i++) { // 循环n次,输出排序后的字符串
        puts(strs[i]); // 输出strs[i]中的字符串
    }

    return 0; // 返回0,表示程序正常结束
}

在这里插入图片描述

三、知识点 ⭐️

1、C 库函数strcmp():比较字符串大小。

2、C 库函数strcpy()

3、C 库函数puts()

4、冒泡排序

5、为什么 上述代码中 前面是 二维数组,后面是一维数组呢?

:📢
实际上 strs 始终是一个二维数组,只是在使用时有一些细节需要注意:

  • (1)、char strs[N][M];
    • 这是一个二维数组,表示 NM 列。
    • 每一行(strs[i])是一个长度为 M 的一维字符数组,用于存储一个字符串。
  • (2)、为什么看起来像一维数组?
    • C 语言中,二维数组的每一行(如 strs[i])可以被视为一个一维数组。
  • (3)、总结
    • strs 始终是一个二维数组,用于存储多个字符串。
    • strs[i] 是二维数组的第 i 行,它是一个一维字符数组,用于存储单个字符串。
    • temp 是一个一维数组,用于临时存储字符串,方便交换操作。
举例如下 🌰:
  • 假设输入如下:👇🏻
5 2
apple
banana
cherry
date
fig
  • strs 的内容如下:👇🏻
strs[0] = "apple"
strs[1] = "banana"
strs[2] = "cherry"
strs[3] = "date"
strs[4] = "fig"
  • 在排序过程中,strs[j]strs[j+1] 会被比较和交换,但 strs 始终是一个二维数组。
    在这里插入图片描述

http://www.kler.cn/a/564492.html

相关文章:

  • fastchat 支持llama3 harmbench PAIR攻击支持 llama3
  • Vue+Element UI table表格,数据展示错位(已解决)
  • Three.js包围盒
  • sqlmap:自动SQL注入和数据库接管工具
  • 线性回归 (Linear Regression)案例分析2
  • 0x02 js、Vue、Ajax
  • Hadoop简介
  • SQL注入(一)—— sql手动注入实操
  • nio中ByteBuffer使用
  • 记录MFC联合halcon界面显示开发
  • Ubuntu下QT安装和调试的常见问题(一)__could_not_dertermine_which_make
  • 大白话解释深度学习中多尺度特征融合及其意义
  • 趣讲TCP三次握手
  • 使用Apifox动态生成请求参数
  • 如何将mobaxterm的默认编辑器修改为vscode
  • 深入浅出:插入排序算法完全解析
  • Java中,Scanner和System.out超时的解决方法及原理
  • 【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现
  • Spring Boot + JSqlParser:全面解析数据隔离最佳实践
  • 左值引用与右值引用详解