美文网首页工作生活
试题6:字符串排序

试题6:字符串排序

作者: PersisThd | 来源:发表于2019-07-07 15:05 被阅读0次

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define StringSize 100    

int main()
{
    int N;
    scanf("%d", &N);
    getchar();

    int i = 0, j = 0;
    char* str[N];
    //int num[N];
    for(i = 0; i < N; i++)
    {
        str[i] = (char*)malloc(sizeof(char) * StringSize);
        gets(str[i]);
    }

    for(i = 0; i < N - 1; i++)
    {
        for(j = 0; j < N-i-1; j++)
        {
            if(strcmp(str[j], str[j+1]) > 0)
            {
                char tmp[100];
                strcpy(tmp, str[j]);
                strcpy(str[j], str[j+1]);
                strcpy(str[j+1], tmp);
            }
        }
    }


    for(i = 0; i < N; i++)
    {
        printf("%s\n", str[i]);
    }
}

此题默认区分大小写,即大写字母永远小于小写字母,例如Z<a;如果不区分,则应该如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define StringSize 100

int compare(char* p1, char* p2, int n1, int n2)
{
    //int flag;
    int n;
    if(n1 < n2)
        n = n1;
    else
        n = n2;

    int i = 0;
    for(i = 0; i < n; i++)
    {
        char tmp1 = p1[i];
        char tmp2 = p2[i];

        if((int)tmp1 < 97)
        {
            tmp1 = tmp1 + 32;
        }
        if((int)tmp2 < 97)
        {
            tmp2 = p2[i] + 32;
        }

        if((int)tmp1 < (int)tmp2)
            return 0;
        else if((int)tmp1 == (int)tmp2)
        {
            if(n1 < n2)
                return 0;
            else
                return 1;
        }
        else
            return 1;
    }
}


int main()
{
    int N;
    scanf("%d", &N);
    getchar();

    int i = 0, j = 0;
    char* str[N];
    //int num[N];
    for(i = 0; i < N; i++)
    {
        str[i] = (char*)malloc(sizeof(char) * StringSize);
        gets(str[i]);
    }

    for(i = 0; i < N - 1; i++)
    {
        for(j = 0; j < N-i-1; j++)
        {
            if(compare(str[j], str[j+1], strlen(str[j]), strlen(str[j+1])))
            {
                char tmp[100];
                strcpy(tmp, str[j]);
                strcpy(str[j], str[j+1]);
                strcpy(str[j+1], tmp);
            }
        }
    }


    for(i = 0; i < N; i++)
    {
        printf("%s\n", str[i]);
    }
}

相关文章

  • 试题6:字符串排序

    试题描述:给定n个字符串,请对n个字符串按照字典序排列输入描述:输入第一行为一个正整数n(1≤n≤1000),下面...

  • 数据结构

    排序算法 1、选择排序 2、插入排序 3、希尔排序 4、归并排序 5、快速排序 6、堆排序 查找 字符串

  • Python Vs Perl6

    zip() Python Perl6 按照日期字符串排序 给定一个列表,按照日期字符串进行排序: Python 输...

  • 文章收藏

    iOS面试题系列之常见算法 排序算法整理 字符串【3】最长回文子串【3】最长无重复子串【1*】字符串转数字【4】K...

  • 问题收集1

    算法部分 1.快速排序 2.冒泡排序 3.希尔排序 4.插入排序 5.统计出现的字符串 6.push pop

  • js算法

    排序算法 冒泡排序 快速排序 字符串操作 判断回文字符串 翻转字符串 反向遍历字符串 function reve...

  • JS排序

    1、数字排序 2、字符串排序 3、中文排序 4、中英文数字字符串排序

  • nodejs实现字符串排序(高位优先&低位优先)

    字符串排序 网上很多都是c实现的,这里我写一个nodejs实现的 低位优先字符串排序 高位优先字符串排序

  • 常见算法的js实现

    排序算法 1、冒泡排序 2、快速排序 3、二路归并 字符串操作 1、判断回文字符串 2、翻转字符串 思路一:反向遍...

  • 常见算法的 js 实现

    排序算法 1、冒泡排序 2、快速排序 3、二路归并 字符串操作 1、判断回文字符串 2、翻转字符串 思路一:反向遍...

网友评论

    本文标题:试题6:字符串排序

    本文链接:https://www.haomeiwen.com/subject/bjichctx.html