将输入的学生信息按名字排序后输出。
Input
每个学生信息是两行,第一行是名字,由英文字母和空格构成,最长18个字符;第二行格式为:
学号,性别 年龄
学号是一个不超过100,000的整数; 性别是一个字符,为'M' 或'F'; 年龄是一个不大于100的整数
输入数据最后有可能有若干个回车,也有可能没有
学生不会超过100个,不会出现两个学生的名字仅大小写有差别的情况
Output
格式和输入数据基本一样,唯一不同在于输出学号的时候,必须用前导0补足8位
Sample Input
Tom Hanks 7863,M 18 Mary Lu 18343,F 21 Santa Fe 27863,M 17
Sample Output
Mary Lu 00018343,F 21 Santa Fe 00027863,M 17 Tom Hanks 00007863,M 18
代码:
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
struct node
{
char name[1000];
int ID;
char sex[10];
int score;
};
bool cmp(node student1,node student2)
{
if(strcasecmp(student1.name,student2.name)<0)
return 1;
else
return 0;
}
int main(void)
{
struct node student[100];//结构体数组
int i=0,j,k;
while(gets(student[i].name))
{
if(strlen(student[i].name)==0)
break;
scanf("%d,%s%d",&student[i].ID,&student[i].sex,&student[i].score);
i++;
getchar();//缓冲回车
}
sort(student,student+i,cmp);
for(j=0;j<i;j++)
{
printf("%s\n%08d,%s %d\n",student[j].name,student[j].ID,student[j].sex,student[j].score);
}
return 0;
}
sort实现的是从小到大排序
例如:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int i;
char a[10]={9,6,3,8,7,4,2,1,8};
for(int i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");
sort(a,a+9);
for(int i=0;i<9;i++)
printf("%d ",a[i]);
return 0;
}
如果想用sort从大到小排序呢?
这里需要加入第三个函数(自定义名称)sort(a,a+9,compare)
例如:
#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{
if(a>b)
return 1;
else
return 0;
}
int main()
{
int i;
char a[10]={9,6,3,8,7,4,2,1,8};
for(int i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");
sort(a,a+9,compare);
for(int i=0;i<9;i++)
printf("%d ",a[i]);
return 0;
}
strcmp是用来比较字符串(区分大小写)
strcasecmp (不区分大小写)
例如两个字符串s1和s2,字符串的比较是由ACSCII的顺序决定的,由s1的第一个字符减去s2的第一个字符,若相等则比较两个字符串的第二个字符,直到差值不为零,返回差值,例如比较字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
返回值:若s1和s2相同,返回值零;若s1>s2,返回大于零的值;若s1<s2,返回小于零的值。
#include<stdio.h>
#include<string.h>
int main(void)
{
char *a="asdfg";
char *b="Asdfg";
char *c="aSdfg";
char *d="asdfg";
printf("%d\n",strcmp(a,d));
printf("%d\n",strcmp(a,c));
printf("%d\n",strcmp(b,c));
return 0;
}