一开始未想到用类,所以排序的时候很麻烦,当排完序还要记住原来的位置时,最好用类把原来的位置写到成员变量里。
stable_sort的cmp只能传值,不能传引用。
字典序是按照asii码排的,A<B<C,acii码小的在前,即升序。
思路:先把key中的字符连同位置存入一组对象里,再对这组排序,排在前面说明这一列先存进二维数组里;然后一排一排地输出这个二维数组即可。
// source code of submission 448884, Zhongshan University Online Judge System
//sicily 1036
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
class keyword
{
public:
keyword(){}
keyword(char a,int b)
{
x=a;
y=b;
}
char x;
int y;
};
bool cmp(keyword a,keyword b)
{
return a.x<b.x;
}
int main()
{
keyword record[10];
string code,key;
char arr[200][200];
int i,j;
while(1){
int l=0;
cin>>key;
if(key=="THEEND") break;
int col=key.size();
for( i=0;i<col;i++){
record[i]=keyword(key[i],i);
}
stable_sort(record,record+col,cmp);
cin>>code;
int row=code.size()/col;
for(i=0;i<col;i++){
int n=record[i].y;
for(j=0;j<row;j++){
arr[j][n]=code[l++];
}
}
for(i=0;i<row;i++){
for(j=0;j<col;j++){
cout<<arr[i][j];
}
}
cout<<endl;
}
return 0;
}