HDU 开门人和关门人
不得不说C++的string类真的很好用,string类的字符串的比较跟strcmp的比较的标准差不多,这是网上的回答:
“比较字符串是按照字符串中的字符一个个比较的 只要一个字符不相同 那么就停止比较得出结果
而字符的比较则是比较其Unicode值 而非ascii码值 因为ASCII是不可能容纳下全世界这么多种语言这么多字符的”
而strcmp():
规则
当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
当s1>s2时,返回正数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
#include <iostream> #include <cstring> using namespace std; struct member{ string name,timee; }minn,maxx; int main(){ string s,mi,ma; int T,n; cin>>T; while(T--){ cin>>n; n--; cin>>s>>minn.timee>>maxx.timee; minn.name=maxx.name=s; while(n--){ cin>>s>>mi>>ma; if(mi<minn.timee){ minn.name=s; minn.timee=mi;} if(ma>maxx.timee){ maxx.name=s; maxx.timee=ma;} } cout<<minn.name<<" "<<maxx.name<<endl; } }
如果不用字符串比较,那么就要把时间转换为整型
b[i] = ( (a[i].begin[0] - '0' ) *10 +( a[i].begin[1] -'0')) * 3600 + ((a[i].begin[3] - '0') *10 + (a[i].begin[4] -'0')) *60 +( (a[i].begin[6] - '0')*10 + (a[i].begin[7] -'0')) ;
这样在struct数组结构体的基础上还要在定义数组成员,做起来就较麻烦了。(PS:还是要认真啊,开始在最大和最小初始化的时候写成minn.name=maxx.timee=s,因为大脑的思路是对的,所以因为笔误的错误花了很长时间找,敲的时候认真点)