知识点:字符串的输入及排序
易错点:输入n k后空格的吸收处理
【问题描述】
输入n 个互不相同的字符串(长度均不大于50),按字典序输出最大的k个。(1 ≤ k ≤ n ≤ 100)
【输入形式】
第一行,两个整数n和k,使用一个空格分隔。
接下来n 行,每行一个字符串
【输出形式】
k行最大的字符串(递增输出)
【样例输入】
7 3
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
【样例输出】
Wednesday
Tuesday
Thursday
方法一:数组法
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,m,k;
scanf("%d%d",&m,&k);
getchar();
char a[m][50],b[100];
for(i=0;i<m;i++)
{
gets(a[i]);//把字符串存入其中
}
for(i=0;i<m-1;i++)
{
for(j=i+1;j<m;j++)
{
if(strcmp(a[i],a[j])<0)
{
strcpy(b,a[i]);//strcpy()将字符串2的所有字符复制到字符串数组1中
strcpy(a[i],a[j]);
strcpy(a[j],b);
}
}
}//选择排序法,两个数组的首地址的复制交换
for(i=0;i<k;i++)
{
puts(a[i]);
}
return 0;
}
方法二:指针法
#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i,j; char *b;
scanf("%d%d",&n,&m);char *p[n];
int a[n][100];
for(i=0;i<n;i++)
scanf("%s",a[i]);
for(i=0;i<n;i++)p[i]=a[i];
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(p[i],p[j])<0)
{
b=p[i];
p[i]=p[j];
p[j]=b;
}
}
}
for(i=0;i<m;i++)
printf("%s\n",p[i]);
}