趕快加入我們來參與討論吧!
您需要 登錄 才可以下載或查看,沒有帳號?加入我們
x
本帖最後由 domen111 於 2015-1-29 17:01 編輯
[C++] 純文本查看 復制代碼 #include <stdio.h>
#include <algorithm>
using std::sort;
/*using structure*/
struct BOOK{
char author[200];
char name[200];
int year;
};
BOOK mybook[100];
int rank[128];
void init_rank(void){
char s[29] = " .XOBCDAFGHUJKLMNIPQRSTEVWYZ";
for(int i=0;i<28;++i){
rank[s[i]] = i;
if( s[i] >= 'A' && s[i] <= 'Z' )
rank[s[i]-'A'+'a'] = i;
}
rank[0] = -1;
}
int XDrz;
bool string_cmp(char s1[], char s2[]){
for(int i=0;s1[i]!=0 || s2[i]!=0;++i){
if( rank[s1[i]] < rank[s2[i]] )
return true;
else if( rank[s1[i]] > rank[s2[i]] )
return false;
}
return false;
}
bool cmp(BOOK x, BOOK y){
if( string_cmp(x.author, y.author) )
return true;
else if( string_cmp(y.author, x.author) )
return false;
if( x.year < y.year ) return true;
else if( x.year > y.year ) return false;
if( string_cmp(x.name, y.name) )
return true;
else
return false;
}
int main(){
init_rank();
int n;
char buf[30+100+4+10];
gets(buf);
sscanf( buf, "%d", &n);
for(int i=0;i<n;++i){
gets(buf);
int len = 0;
int j;
for(j=0;buf[j]!=',';++j)
mybook[i].author[len++] = buf[j];
j += 2;
len = 0;
for(;buf[j]!='(';++j)
mybook[i].name[len++] = buf[j];
j += 1;
char number[5];
for(int k=0;k<4;++k)
number[k] = buf[j+k];
number[4] = 0;
sscanf( number, "%d", &mybook[i].year);
}
sort( mybook, mybook+n, cmp);
for(int i=0;i<n;++i){
printf("%s, %s(%d)\n", mybook[i].author, mybook[i].name, mybook[i].year);
}
return 0;
}
Zerojudge b240 |