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

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 始终是一个二维数组。
    在这里插入图片描述

相关文章:

  • 神经性手抖是一种常见的症状
  • 场景重建——Nerf场景重建
  • Python 编程题 第四节:斐波那契数列、列表的复制、暂停后输出、成绩评级、统计字符
  • 【现代Web布局与动画技术:卡片组件实战分享】
  • 塑造网络安全的关键事件
  • DeepSeek开源周,第五弹再次来袭,3FS
  • 掌握Git:从入门到精通的完整指南
  • 数字电子电路基础第三章——门电路(二)
  • [深度学习] 大模型学习2-提示词工程指北
  • 云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代
  • 我忘记 rar、zip 密码了,咋打开呀?
  • Python线程进程协程
  • Redis入门基础
  • 2.希尔排序(缩小增量排序)
  • 【Pytest】setup和teardown的四个级别
  • React底层常见的设计模式
  • P9231 [蓝桥杯 2023 省 A] 平方差
  • 因子有效性的审判使者——回测分析【量化实践】
  • 多智能体博弈代码案例
  • 【西瓜书《机器学习》十至十二章内容通俗理解】
  • 用vue做商城网站常用的js/济南seo培训
  • 小程序网站做多大尺寸/直接进网站的浏览器
  • 苏州 规划建设局网站/怎么制作小程序
  • 网站建设网页设计用什么软件/今日最近的新闻大事10条
  • 网站广告案例/会计培训机构排名
  • 做网盟的网站必须备案/长沙网站制作