题解 | 华为HJ14#字符串排序#

字符串排序

https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723

描述

给定 n 个字符串,请对 n 个字符串按照字典序排列。

数据范围: 1 \le n \le 1000 \1n1000  ,字符串长度满足 1 \le len \le 100 \1len100 

输入描述:

输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。

输出描述:

数据输出n行,输出结果为按照字典序排列的字符串。

示例1

输入:
9
cap
to
cat
card
two
too
up
boat
boot
复制
输出:
boat
boot
cap
card
cat
to
too
two
up
代码:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
//以下是Senky的代码:
int cmp(const char** p1, const char** p2)
{
    return strcmp(*p1, *p2);//升序排列即字典顺序
}
int main() {
    int n;
    scanf("%d\n", &n);//手动输入字符串个数
    char* b;
    char** a;
    int i = 0;
    
    a = (char**)malloc(n * sizeof(char*));//这里有指向(n个char*)的指针a

    for (i = 0; i < n; i++)
    {
        b = (char*)malloc(101 * sizeof(char));//这里有指向(大小为100个char)的指针b
        gets(b);//获取一行字符串
        a[i] = b;//将字符串的指针存在a中
    }
    qsort(a, n, sizeof(char*), cmp);//快速排序

    for (i = 0; i < n; i++)
    {
        printf("%s\n", a[i]);//输出字符串
    }

    for (i = 0; i < n; i++)
    {
        free(a[i]);//释放malloc来的a
    }
    return 0;//编辑于2022/09/09
}
图解:

总结:
①灵活使用指针和二级指针,可以极大的减小运算内存,穷举也能做但是不够完美;
②注意for循环中malloc的内存free方式;
③当前帖子仅供自我精进、学习使用






#华为笔试#
华为-HJ 文章被收录于专栏

机试的题解

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务