【C语言】字符串排序

2023-11-06

前言

在理解二维数组和数组指针的结合使用、指针数组相关内容后,会更易于理解。

(一)需要的相关知识

  • 指针数组存放常量字符串和二维数组结构存储的字符串
  • 排序算法:冒泡排序
  • 字符串比较函数string.h中的strcmp函数、字符串拷贝strcpy函数,也有仿写过

1在这里插入图片描述

(二)代码实现

(1)指针数组指向的字符串常量

分析:

  • 字符串常量存放在.rodata段,属于只读数据区,只能读取,不能修改,所以交换数据只能交换指针数组中的指针的指向

代码实现:

#include <stdio.h>
#include <string.h>

#if 1
void ShowCharptrArr(const char** arrname, int size)
{
	if(arrname == NULL) return;
	if(size <= 0) return;
	
	for(int i = 0; i < size; i++)
	{
		printf("%s\n", arrname[i]);
	}
}
	
void BubbleSortString(const char** arrname, int size)
{
	if(arrname == NULL || size < 2)
		return;
	for(int i = 0; i < size - 1; i++)
	{
		for(int j = 0; j < size - i - 1; j++)
		{
			if(strcmp(arrname[j], arrname[j + 1]) > 0)
			{
				const char* tmp = arrname[j];
				arrname[j] = arrname[j + 1];
				arrname[j + 1] = tmp;
			}
		}
	}
}

int main () 
{
	const char* namebuff[] = {"XingQiu", "Xiangling", "ChongYun", "HuTao"};	
	BubbleSortString(namebuff, 4);
	ShowCharptrArr(namebuff, 4);
	return 0;
}
#endif

结果:
在这里插入图片描述

(2)使用二维数组存放字符串

分析:

  • 二维数组的遍历使用数组指针来传参
  • 二维数组的数组名就是首个一维数组的首地址
  • 实参就是二维数组名
  • 拷贝的时候不能直接使用=,使用字符串拷贝strcpy函数进行拷贝

代码实现:

#if 1
#include <stdio.h>
#include <string.h>
void ShowSecondArr( char (*p)[128], int size)
{
	if(p == NULL|| size <= 0) return;
	int i;
	for(i = 0; i < size; i++)
	{
		printf("%s\n", p[i]);
	}
}

void BubbleSort( char (*p)[128], int size)
{
	if(p == NULL || size <= 0) return;
	int i;
	int j;
	for(i = 0; i < size; i++)
	{
		for(j = 0; j < size - i - 1; j++)
		{
			if(strcmp(p[j], p[j+1]) > 0)
			{
				char tmp[128] = {0};
				strcpy(tmp, p[j]);
				strcpy(p[j], p[j+1]);
				strcpy(p[j+1], tmp);
			}
		}
	}
}

int main () 
{
	char arrname[5][128] = {{"XingQiu"}, {"Xiangling"}, {"ChongYun"}, {"HuTao"}};
	BubbleSort(arrname, 4);
	ShowSecondArr(arrname, 4);
	return 0;
}
#endif

结果:
在这里插入图片描述

参考资料:


  1. https://zh.cppreference.com/w/c/string/byte/strcmp ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言】字符串排序 的相关文章

  • 评分卡建模工具scorecardpy全解读

    说到评分卡建模工具 做过评分卡的应该都能想到谢博士的scorecardpy和专为工业界模型开发设计的Python工具包 Toad 两者相比 scorecardpy更加轻量级 且依赖较少 可以满足大多数场景下的评分卡构建 为了使评分卡建模流程
  • MarkDown编辑器字体颜色设置

    文章目录 一 颜色 二 大小 三 字体 四 背景色 五 文章转载 CSDN的markdown编辑器是其衍生版本 扩展了Markdown的功能 如表格 脚注 内嵌HTML等等 就是内嵌HTML 接下来要讲的功能就需要使用内嵌HTML的方法来实
  • 2019你会被裁员吗?

    2018年 我的经历 整个互联网行业都在裁员1 3 我也是亲历者 我想弄清楚为什么 所谓的行业凛冬 具体是什么 是真的来了 或是老板们在忽悠我们 找到原因 我希望反思 2019年可以不会被裁员 现在 我有了答案 和你分享 烧脑准备哈 开始

随机推荐

  • centos7 磁盘刷新容量

    1 添加一块新的硬盘sdb 40G lsblk mkdir test mkfs ext4 dev sdb blkid grep sdb echo blkid grep sdb gt gt etc fstab vim etc fstab UU
  • Qt 样式表、绘图事件设置渐变色

    先放效果图 这里的窗体颜色 字体 pushbutton背景都是渐变色 渐变色的颜色可以在 链接 获取 对应网址 https webgradients com 现在来说具体操作步骤 关于这个窗体的背景颜色 这里是直接重写了绘图事件 注意这里的
  • Spring、Springboot入门之事务处理

    1 什么是事物 通俗讲事物就是一组原子操作单元 组内的操作要么全部执行成功 要么全部失败 事务有四个特性 ACID 1 原子性 Atomicity 事务是一个原子操作 由一系列动作组成 事务的原子性确保动作要么全部完成 要么完全不起作用 2
  • echarts中横坐标显示为time,使用手册

    需求 后端传递 两段数据 不同时间间隔 的24h实时数据 前端需要根据24小时时间展示 要求 x轴为0 24h 每个两小时一个刻度 误区 刚开始通过二维数据的形式秒点 data x y x y 因为是两组数据的横纵坐标不一样 所有没法固定x
  • Microsoft Dynamics CRM 2013升级2015(二)正式安装升级 2015及 Reporting Extensions安装

    Microsoft Dynamics CRM 2015 系统要求和所需技术 Microsoft Dynamics CRM 本地 版本需要以下软件 Microsoft Windows Server Microsoft Windows Serv
  • 多路复用IO与NIO

    最近在学习NIO相关知识 发现需要掌握的知识点非常多 当做笔记记录就下 在学NIO之前得先去了解IO模型 1 同步阻塞IO Blocking IO 即传统的IO模型 2 同步非阻塞IO Non blocking IO 默认创建的socket
  • QT播放窗口随鼠标拖拽实时移动位置+坐标点的获取方式

    QT播放窗口随鼠标拖拽实时移动位置 坐标点的获取方式 QT坐标获取方式 使用相对坐标获取当前item 视频窗口的拖拽移动 窗口相对坐标示意 代码使用 QT坐标获取方式 相对位置 每个Qwidget都能通过pos 获取到相对自己父类窗口的位置
  • 解决IDEA运行Flink报错java.lang.NoClassDefFoundError: org/apache/flink/api/common/ExecutionConfig....

    解决方法 将provided改为compile 比如
  • pytorch出现RuntimeError: cublas runtime error :cu:259问题,及解决方法

    在跑程序时 出现下面的错误 RuntimeError cublas runtime error the GPU program failed to execute at C w 1 s tmp conda 3 6 041836 conda
  • Android SDK Manager下载包失败问题解决方案

    Android SDK Manager下载失败的主要原因是Google资源被国内禁止访问了 所以才会出现很多开源资源无法访问的情况 但是国家在禁止Google的同时就已经为我们做开发的人员想好了解决方法 所以出现了一些镜像代理可以访问 ht
  • ADMM算法

    ADMM 对偶下降 m i n i m i z e
  • Qt基础:七、QPushButton、QCheckBox.QRadioButton 和 QGroupBox、QLineEdit

    按钮部件的基类是QAbstractButton类 提供了按钮的通用功能 QAbstractButton类的子类包括复选框QCheckBox 标准按钮QPushButton 单选框按钮QRadioButton和工具按钮QToolButton
  • 第十节:JS的中断语句

    1 break语句 break 语句 它被用于 跳出 switch 语句 break 语句也可用于跳出 循环 for i 0 i lt 10 i if i 3 break console log i 结果 0 1 2 break 语句 如果
  • 解决No module named flask的问题

    被困扰了好几天了的问题 找过别的解决方法 都不太适用 还重新安装了一遍PyCharm也没有用 后来感觉可能是我的python和flask不在一个目录下的原因 我猜的 因为我把python卸载重新安装了一遍 在d盘里开了一个python目录
  • 如何快速开通微信小程序 流量主

    1 开通微信小程序分享盆友圈功能 2 转发给自己的盆友 3 找一些相关的群转发 4 建立自己的互刷群 有意的可以添加微信 相互刷 5 下面的我的小程序demo 欢迎大家看一看
  • dgl学习笔记05-在GPU上使用DGL图

    这个很简单 跟使用pytorch的GPU计算是一样的 就不解释了 直接上代码 代码 import dgl import torch device if torch cuda is available device cuda 0 else d
  • 常见测温传感器及电路原理图

    温度这个物理量在很多场合需要检测 目前市场测温的方法和种类也比较多 在选用何种方法的时候 需要被考虑到的因素有 温度检测范围 精度 灵敏度 应用场合 封装形式 成本等等 根据自己最近研究的内容 将温度检测的方式也可以叫电路分为模拟式和数字式
  • Linux登录mysql时 密码正确登录不进去,没有密码却能登进去

    今天上午遇到的问题 mysql密码正确登录不进去 没有密码却能登进去 解决方法 使用Navicat连接上该root权限的数据库 进入mysql 库的user 表 将 root用户的Host 127 0 0 1或者 local 改为local
  • IDEA tomcat8.5 控制台打印中文内容乱码

    运行SpringMVC项目时发现后台获取到的中文数据输出在控制台上是乱码 已经设置了字符编码过滤器 解决 方法1 修改D apache tomcat 8 5 70 bin目录下catlina bat文件 追加 Dfile encoding
  • 【C语言】字符串排序

    文章目录 前言 一 需要的相关知识 二 代码实现 1 指针数组指向的字符串常量 2 使用二维数组存放字符串 前言 在理解二维数组和数组指针的结合使用 指针数组相关内容后 会更易于理解 一 需要的相关知识 指针数组存放常量字符串和二维数组结构