输入一组字符串,其中英文逗号作为分割,分割后的每个字符串的最后一位字符【陷阱,不一定是数字】为队列入栈的优先级,ASCII码越大,优先级越高,相同优先级按输入顺序排序。
输入:一个长度不超过1000的字符
A1,B2,C3,a9,d0【陷阱:最后一位不一定是数字,每个字符串也不一定只有两个字符】
输出:按照优先级输出出栈的字符串,以英文逗号作为分割
a9,C3,B2,A1,d0
运行结果:
#include<cstdio>
#include<string>
#include<iostream>
#include<cstdlib>
using namespace std;
struct node{
char data;
string sa;
}Nodes[1000];
int main()
{
string str;
int te;
int len,i;
int st,js;
while(cin>>str){
str+=',' ;
len = str.length();
int re[1000]={0};//记录逗号
int cnt1 = 0;
//找切割点
re[cnt1]=-1;
cnt1++;
for(i=0;i<len;i++){
if(str[i]==','){
re[cnt1]=i;
cnt1++;
}
}
re[cnt1]=len;
int cnt = 0;
for(i=0;i<len;i++){
if(str[i]==','){
Nodes[cnt].data = str[i-1]; //最后一位字符,不一定是数字
//找多个字符
for(int j = re[cnt]+1;j<i-1;j++){
Nodes[cnt].sa += str[j];
}
cnt++;
}
}
//找最大值
int index;
for(i=0;i<cnt;i++){
char max='/';
for(int j =0;j<cnt;j++ ) {
if(Nodes[j].data!='+' && Nodes[j].data>max){
max = Nodes[j].data;
index = j;
}
}
//打印
cout<<Nodes[index].sa<<Nodes[index].data;
if(i!=cnt-1){
printf(",");
}
Nodes[index].data = '+';
}
for(i=0;i<100;i++){
Nodes[i].sa.clear();
}
printf("\n");
}
return 0;
}