【C语言】字符串排序

前言

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

(一)需要的相关知识

  • 指针数组存放常量字符串和二维数组结构存储的字符串
  • 排序算法:冒泡排序
  • 字符串比较函数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 ↩︎

おすすめ

転載: blog.csdn.net/xiaoxiaoguailou/article/details/121403991