友塔校招笔试7-1

7-1 数字排序
给定两个只包含0~9数字的字符串A和B,B中没有重复的数字,要求按照B中数字的顺序(数字越靠前表示越小)对A中的数字重新排序,B中没有出现的数字固定小于B中出现的数字,且按照数字本身的大小进行排序。例如,给定B为“53924”,表示数字实际大小顺序为“0167853924”。
说明:字符串A长度不超过10000,字符串B长度不超过10.
输入格式:
输入的第一行代表字符串A,输入的第二行代表字符串B
输出格式:
输出对字符串A中每个数字排序后的字符串
输入样例:
在这里给出一组输入。例如:
9761039587
53924
输出样例:
在这里给出相应的输出。例如:
0167785399

#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
int main(){
  string s1,s2;
  char temp;
  

    getline(cin,s1);
    getline(cin,s2);
    
   int len=s2.size();
       
 
 string::iterator j=s2.begin();
while(j!=s2.end())
 {  
    temp=*j;
    if(s1.find(temp)==string::npos)//如果B集合中的数字在A集合不存在,则删除B集合中该数字 
    {s2.erase (s2.find(temp),1);
	}
	int i=0;
    while(s1.find(temp)!=string::npos)//如果B集合中的数字在A集合中存在,则找到每一个A集合中的相同数字删除,并使B集合中该数字数量增加 
	{
	
    s1.erase(s1.find(temp),1) ;
	
	if(s1.find(temp)!=string::npos)
	{
	
	j=s2.insert(s2.begin()+s2.find(temp)+(i++),temp);//cout<<s1<<'\t';cout<<temp<<' ';cout<<s2<<endl;
	continue;
	}
	                           //迭代器移动到增加数字的下一个位置 
	
	 j++;
	}
	//cout<<*j<<endl;
} 
	sort(s1.begin(), s1.end());
	
    cout<<s1+s2;
 
  
  return 0;
} 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值