试题6:字符串排序

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

#include 
#include 
#include 
#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

#include 
#include 
#include 
#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:字符串排序)