成绩排序问题

来源:互联网 发布:安卓麻将游戏源码 编辑:程序博客网 时间:2024/06/09 15:55

【例题】

先按照成绩排序由大到小排序、成绩相同的名字序号小的在前、名字也相同则年龄小的在前。

【代码如下】

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct E//这里的E是结构体的什么名?那buf呢?
{
    char name[101];//字符数组和字符串有什么区别吗?
    int age;
    int score;
}buf[1000];
bool cmp(E a, E b)//可以用这一句bool operator < (const E &b) const替换下面一句,相当于重载直接定义小于运算符,下面的sort里就不用cmp了
{
    if(a.score != b.score)
        return a.score < b.score;
    int temp = strcmp(a.name,b.name);//strcmp用法???
    if(temp != 0)
        return temp < 0;
    else
        return a.age < b.age;
}
int main()
{
    int n;
    while(scanf("%d", &n)!=EOF)
    {
        for(int i=0; i<n; i++)
        {
             scanf("%s%d%d", buf[i].name, &buf[i].age, &buf[i].score);
        }
        sort(buf, buf+n, cmp);
        for(int i=0; i<n; i++)
        {
            printf("%s %d %d\n", buf[i].name, buf[i].age, buf[i].score);
        }
      }
    return 0;
}

①首先,这里涉及一个学生的三个属性。用结构体表示。

struct SIMPLE{
 
    int a;
 
    char b;
 
    double c;
 
};
1-SIMPLE标签的结构体,另外声明了变量t1、t2、t3。也就是说struct后面的SIMPLE是这个结构体的标签

struct SIMPLE t1, t2[20], *t3; 可以用它声明变量。

2-也可以用typedef创建新类型

typedef struct{
    int a;
    char b;
    double c; 
} Simple2;

现在可以用Simple2作为类型声明新的结构体变量

Simple2 u1, u2[20], *u3;

3-当然!也可以“嵌套”

//此结构体的声明包含了其他的结构体
struct COMPLEX{
    char string[100];
    struct SIMPLE a;
}; 

//此结构体的声明包含了指向自己类型的指针
struct NODE{
    char string[100];
    struct NODE *next_node;
};
4-

C++中的结构体与类的区别

类与结构体在C++中有三点区别。
(1)class中默认的成员访问权限是private的,而struct中则是public的。
(2)从class继承默认是private继承,而从struct继承默认是public继承。
(3)C++的结构体声明不必有struct关键字,而C语言的结构体声明必须带有关键字(使用typedef别名定义除外)。
②字符数组和字符串区别:
唯一的区别就是字符串末尾有一个'\0‘
char ch1[]="hello";//该串有6个字符,5个可见字符,因为是串,所以末尾自动加上'\0';共六个
char ch2[]={'h','e','l','l','o'};//这样写就成了数组.是确确实实的5个字符
定义字符串有两种方法:

一、字符串指针 char *string="abcde";

二、一维字符数组。例如:char string[10];string="abcde";

用字符数组定义注意了,数组长度为n,但是字符个数只能为n-1,就是上面说的计算机默认加了\0占了一个,否则会溢出。
字符数组一维的和字符串一样,二维的就是char string[M][N];当然你还可以类似定义多维的。


③重载运算符:

【好吧俺看了半天只明白了大多数的运算符都可以重新定义,有时间可以看看下面这个网址的内容】
http://blog.csdn.net/zgl_dm/article/details/1767201


④strcmp用法:

字符串比较函数,一般形式为strcmp(字符串1,字符串2)。
比较规则:
对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。如果全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
如果两个字符串都由英文字母组成,则有一个简单的规律:在英文字典中位置在后面的为“大”,还要特别注意:小写字母比大写字母“大”。
返回值:
(1)字符串1=字符串2,返回0
(2)字符串1>字符串2,返回一个正整数
(3)字符串1<字符串2,返回一个负整数。

0 0