蓝桥杯字符串排序 C语言 (新手向)

题目描述:

对输入的字符串进行排序后输出

输入描述:

多个测试用例,每个测试用例一行。

每行通过空格隔开,有n个字符,n<100。

输出描述: 

对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开。

 示例:

输入:

a c bb
f dddd
nowcoder

输出:

a bb c
dddd f
nowcoder

 这个题目需要判断每一行是一组数据 和 文本的输入截止,还有 字符串的排序

1. 判断 输入截止

这个比较简单可以通过

while((scanf("%s",&a[i][m[num]]))!=EOF){}

或者

while((scanf("%s",&a[i][m[num]]))==1){}

来判断输入的截止;

2.判断 一行是一组数值

通过判断是否为'\n'字符来进行

while(getchar()!='\n'){}
3.字符串的排序

这里我们使用strcmp函数和qsort函数就可以

qsort函数用法简要 

strcmp函数用法详情

char a[100];
int compare(const char *a,const char *b){
    return strcmp(a, b);
}  //这里定义一个比较函数下面qsort函数要用

qsort(a,100,sizeof(a[0]),compare);//排序函数
 4.把他们连起来

这里我一开始做的是把整个数据存了起来,最后再同意输出的,蓝桥杯其实不用直接一股脑全部输出出来,你排序完一行直接输出一行就行。

数据全部存起来一块输出的代码(比较麻烦看看理解一下吧,下边还有简化的):

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int compare(const char *a,const char *b){
    return strcmp(a, b);
}   //判断字符串大小函数
int main(){
    char a[100][100][100]; //定义了一个抽象的东西
    int i=0;    //这个i代表行数
    int m[100]; //这里我写出来代表每行的个数,然后把每行的个数存起来
    m[0]=0;     //设个初始值
    int num=0;  //每行的个数值
    while((scanf("%s",&a[i][m[num]]))!=EOF) //判断输出结束
    {
        m[num]++;
        while(getchar()!='\n') //判断换行
        {
            scanf("%s",&a[i][m[num]]);
            m[num]++;
        }
        i++;
        num++;
    }
    for(int x=0;x<i;x++) //给每一行排序
    {
        qsort(a[x], m[x],sizeof(char[100]), compare); //排序
        for (int b=0; b<m[x]; b++) 
        {
            printf("%s ",a[x][b]);  //输出结果
        } 
        printf("\n");  //别忘了换行
        
    }

    return 0;
}

每行排序后再输出(这个就简单多了):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compare(const char *a,const char *b)
{
    return strcmp(a, b);
}
int main ()
{
    int a[100][100];
    int num = 0;
   while((scanf("%s",&a[num])) !=EOF)
    {
       num ++;
       if(getchar()=='\n')
       {
         qsort(a,num,sizeof(a[0]),compare);
         for(int i = 0;i < num;i ++)
         {
             printf("%s ",a[i]);
         }
         printf("\n");
         num = 0;
        }
    }
    return 0;
}

 这样就完成了(*╹▽╹*)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值