目录
描述
给定 n 个字符串,请对 n 个字符串按照字典序排列。
数据范围:1≤n≤1000 ,字符串长度满足 1≤len≤100
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。

解题过程
上个月曾经考虑过提交代码的这种思路,也考虑过更为复杂的思路比如说自己写类似于strcmp函数()。
于我,完成这题的困难之处在于,arr[i][j]作为一个二维数组,尝试以arr[0]作为第二维的首地址,结果实现了,说明我想的是正确的(知识点记得不牢的后果),还有再次复习使用了strcmp函数,等等。
以及上个月觉得有难度的题目,现在不这么觉得了,真心体会到自己的进步。
提交代码
#include <stdio.h>
#include <string.h>
int main() {
int a, b,i,j,cmp;
scanf("%d",&a);//字符串数量
char arr[a][101];//声明
char t[101];//要比给定的长度100多一个
for(b=0;b<a;b++)
{
scanf("%s",arr[b]);
}
for(i=0;i<a-1;i++)
{
for(j=i+1;j<a;j++)
{
cmp=strcmp(arr[i],arr[j]);
//strcmp(str1,str2)
//若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
if(cmp>=0)
{
strcpy(t,arr[j]);
strcpy(arr[j],arr[i]);
strcpy(arr[i],t);
}
}
printf("%s\n",arr[i]);
}
printf("%s\n",arr[a-1]);
return 0;
}
学习代码
(来源:https://www.nowcoder.com/users/198778549)
int mycompare(void * a, void *b){
return (strcmp((char *)a,(char *)b)); //strcmp是字符串比较函数
}
int main(void){
int i,n = 0;
scanf("%d",&n); //获取数组的一维坐标大小范围
char input[n][101]; //对数组的一维坐标不要直接设定成1000,否则会报内存不足
for(i=0;i<n;i++){
scanf("%s",&input[i]);
}
qsort(input,n,sizeof(input[0]),mycompare); //直接调用stdlib.h的比较函数
for(i=0;i<n;i++){
printf("%s\n",input[i]);
}
return 0;
}
收藏点
1. strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
2. 有的题目字符串的长度为1~100,但是声明的时候要赋给第二维101的长度。
这篇博客主要介绍了如何使用C语言对包含大小写字母的字符串数组进行字典序排序,通过解题过程和代码示例展示了strcmp函数的运用,并分享了作者的成长体验。
370

被折叠的 条评论
为什么被折叠?



