【C语言题解】输入n(1~9),再输入n个长度不超过50的字符串,给这n个字符串排序并输出它们

2024-06-14 14:46:45 浏览数 (1)

解题思路:

首先:使用一个二维字符数组来存储输入的字符串。由于n的范围是1到9,我们可以直接定义一个固定大小的二维数组。

读取输入

  • 然后读取整数n,并检查其是否在有效范围内。
  • 然后使用循环读取n个字符串。可以使用fgets函数来读取字符串,同时要注意处理字符串末尾可能存在的换行符。(fgets不会忽略空格及空格后面内容,而scanf会忽略)

排序字符串:选择一个合适的排序算法对字符串进行排序。由于字符串的排序通常基于字典序,我使用了strcmp函数来比较两个字符串的大小。这里我采用了冒泡排序来实现。

代码

代码语言:javascript复制
#include<stdio.h>
#include<string.h>
void Input(char p[][50], int len)
{
	int i;
	for (i = 0; i < len; i  )
	{
		fgets(p[i],50,stdin);
		p[i][strcspn(p[i], "n")] = 0;//移除字符末尾的换行符
	}
}
void Output(char (*p)[50], int len)
{
	int i;
	for (i = 0; i < len; i  )
		//puts(p[i]);//两者效果一样
		printf("%sn",p[i]);
}
void Sort(char(*p)[50], int len)//排序
{
	int i = 0;
	char temp[50];
	for (i; i < len-1; i  )
	{
		int j = 0;
		for (j; j < len - 1 - i; j  ) 
		{    
			if (strcmp(p[j], p[j   1]) > 0)//使用strcmp函数来比较
			{
				strcpy(temp, p[j]);
				strcpy(p[j], p[j 1]);
				strcpy(p[j 1], temp);
			}
		}
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	char arr[10][50];
	Input(arr,n);
	Output(arr, n);
	Sort(arr, n);
	printf("排序后:n");
	Output(arr, n);
	return 0;
}

0 人点赞