题目描述:
对输入的字符串进行排序后输出
输入描述:
多个测试用例,每个测试用例一行。 每行通过空格隔开,有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;
}
这样就完成了(*╹▽╹*)