比较大小(重载运算符/重写cmp)

方法1:重载运算符。

方法2:重写cmp函数。

例题:大整数比较

关于strcmp函数(C/C++函数):

设这两个字符串为str1,str2,

若str1=str2,则返回零;

若str1

若str1>str2,则返回正数。

//大整数排序 
#include
#include
#include
using namespace std;
struct Str{
	string s;
	int len;
	bool operator < (const Str &a)const{
		if(len!=a.len) return len>N){
		string str;
		for(int i=0;i>str;
			s[i].s=str;
			s[i].len=str.length();
		}
		sort(s,s+N);
		for(int i=0;i
//大整数排序 
#include
#include
using namespace std;
bool cmp(string a,string b)
{
    if(a.length()!=b.length())
        return a.length()>N)
    {
        getchar();
        string a[101];
        for(int i=0;i
//EXCEL排序 
#include
#include
#include
#include
using namespace std;
struct Record{
	char id[7];//注意学号是6位数,如果数组设定太小了,不能存储‘\0’终止符号 
	char name[9];
	int grade;
};
bool cmp1(Record a,Record b){
	return strcmp(a.id,b.id)<0;
}
bool cmp2(Record a,Record b){
	if(a.name!=b.name) return strcmp(a.name,b.name)<0;
	else return strcmp(a.id,b.id)<0;
}
bool cmp3(Record a,Record b){
	if(a.grade!=b.grade) return a.grade>type;
		for(int i=0;i

开门人和关门人

题目描述

    每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。

输入描述:

每天的记录在第一行给出记录的条目数M (M > 0 ),下面是M行,每行的格式为     证件号码 签到时间 签离时间 。其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。

输出描述:

对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。

注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。

输入

3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40

输出

SC3021234 CS301133

 注意点:

1. 巧用字符串比较。

2. 此题实际上没有必要用排序。

#include
#include
#include
using namespace std;
struct Record{
	string id; 
	char in[30];
	char out[30];
};
bool cmp1(Record a,Record b)
{
	return strcmp(a.in,b.in)<0;//按照到的时间从小到大 
}
bool cmp2(Record a,Record b)
{
	return strcmp(a.out,b.out)<0;//按照离开的时间从小到大 
}
Record record[1001];
int main(void)
{
	int n;
	cin>>n;
	for(int i=0;i>record[i].id>>record[i].in>>record[i].out;
	}
	sort(record,record+n,cmp1);
	cout<

 

你可能感兴趣的:(算法基础)