当先锋百科网

首页 1 2 3 4 5 6 7

输入一组字符串,其中英文逗号作为分割,分割后的每个字符串的最后一位字符【陷阱,不一定是数字】为队列入栈的优先级,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;
}