3
按点击率显示歌曲(20分)
题目内容:
连续录入5首歌的歌名、歌手和点击率清单并按照点击率由高到低的顺序显示歌曲清单的信息。如果点击率相同,则按照录入的顺序显示。
歌曲清单格式如下:
曲名 演唱者 点击率
输入格式:
5个歌曲的清单,其中曲名(不会超过50个字符)、演唱者为字符串(不会超过20个字符),点击率为整型数
输出格式:
5个歌曲的清单(曲名、演唱者,点击率之间用一个英文空格隔开,末尾没有空格)
输入样例:
匆匆那年 王菲 90
小苹果 筷子兄弟 100
当你老了 莫文蔚 80
最炫民族风 凤凰传奇 85
平凡之路 朴树 95
输出样例:
小苹果 筷子兄弟 100
平凡之路 朴树 95
匆匆那年 王菲 90
最炫民族风 凤凰传奇 85
当你老了 莫文蔚 80
#include <iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
struct song
{
char name[100];
char person[100];
int click;
}s[5];
bool compare(const struct song &a , const struct song &b)
{
return a.click > b.click;
}
int main()
{
for(int i = 0 ; i < 5 ; i++)
{
cin>>s[i].name;
cin>>s[i].person;
cin>>s[i].click;
}
sort(s , s + 5 , compare);
for(int i = 0 ; i < 5 ; i++)
{
cout<<s[i].name<<" "<<s[i].person<<" "<<s[i].click<<endl;
}
return 0;
}
在对结构体数组排序时,首先确定排序数组的关键字,并且在排序过程中不是交换关键字的顺序,而是交换这个结构的地址,从而使结构体数组有序。
#include <iostream>
using namespace std;
#include <algorithm>
typedef struct Test
{
int a;
int b;
}t;
t test[100];
bool Cmpare(const t &a, const t &b) //const必须加,不然会错,目前不懂为啥。当return的是ture时,a先输出,所以示例中是升序
{
return a.a < b.a;
}
int main()
{
sort(test, test+ 100,cmpare);
return 0;
}