二维字符数组排序

本文介绍如何使用C语言对输入的三个字符串(如'BBB', 'CCC', 'AAA')存储在二维字符数组中,并通过冒泡排序算法实现按字母顺序排列,最终输出为'AAA', 'BBB', 'CCC'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.输入多个字符串,存放二维字符数组中,并对二维字符数组进行排序,比如输入:“BBB”、 “CCC", “AAA”,最后二维字符数组的内容为"AAA ,“BBB”,“CCC”

#include<stdio.h>
#include<string.h>
int main()
{
char a[10][10]={},max[10];
int i,j;
for(i=0;i<3;i++)
{
scanf("%s",a[i]);
}
for(i=0;i<2;i++)
{
for(j=0;j<2-i;j++)
{
if(strcmp(a[j],a[j+1])>0)
{
strcpy(max,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],max);
}
}
}
for(i=0;i<3;i++)
{
printf("%s ",a[i]);
}
}

当你有这样一个二维字符数组需要排序,比如 `char[][]` 类型的 `matrix`,你可以首先将其转换成一个一维的字符数组 `flatChars`,然后使用 `Arrays.sort()` 函数进行排序,最后再将排序后的字符按照原始的二维结构组合回去。 以下是简单的步骤: ```java import java.util.Arrays; public class Main { public static void main(String[] args) { char[][] matrix = { {'c', 'a', 'b'}, {'d', 'e'}, {'f'} }; // 将二维字符数组展平为一维数组 char[] flatChars = flatten(matrix); // 对一维字符数组进行排序 Arrays.sort(flatChars); // 将排序后的字符复原回二维数组 char[][] sortedMatrix = restoreMatrix(flatChars, matrix); // 输出排序后的结果 for (char[] row : sortedMatrix) { for (char c : row) { System.out.print(c); } System.out.println(); } } // 展平函数 private static char[] flatten(char[][] matrix) { int length = 0; for (char[] row : matrix) { length += row.length; } char[] flatChars = new char[length]; int index = 0; for (char[] row : matrix) { System.arraycopy(row, 0, flatChars, index, row.length); index += row.length; } return flatChars; } // 复原二维数组函数 private static char[][] restoreMatrix(char[] flatChars, char[][] original) { int rows = original.length; int cols = calculateColumns(original); char[][] sortedMatrix = new char[rows][cols]; int start = 0; for (int i = 0; i < rows; i++) { int end = start + original[i].length; System.arraycopy(flatChars, start, sortedMatrix[i], 0, end - start); start = end; } return sortedMatrix; } // 计算列数的辅助函数 private static int calculateColumns(char[][] matrix) { int maxCols = 0; for (char[] row : matrix) { if (row.length > maxCols) { maxCols = row.length; } } return maxCols; } } ``` 运行上述代码,你会得到二维字符数组 `matrix` 按照字母顺序排列的结果。请注意,这种方法假设每一行的长度相等,如果不等,你需要调整复原二维数组的部分代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值