【例题】
先按照成绩排序由大到小排序、成绩相同的名字序号小的在前、名字也相同则年龄小的在前。
【代码如下】
#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;
};
struct
SIMPLE t1, t2[20], *t3; 可以用它声明变量。
2-也可以用typedef创建新类型
typedef
struct
{
int
a;
char
b;
double
c;
} Simple2;
现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1, u2[20], *u3;
//此结构体的声明包含了其他的结构体
struct
COMPLEX{
char
string[100];
struct
SIMPLE a;
};
//此结构体的声明包含了指向自己类型的指针
struct
NODE{
char
string[100];
struct
NODE *next_node;
};
C++中的结构体与类的区别
一、字符串指针 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,返回一个负整数。