心得:
当希望map能按照特定模板输出时,
1.可以将这个模板存下来,
2.模板的每一个值作为map的key,其次序作为map的value,次序从1开始,这样可以和不需要的字符区分(不需要的字符其值为0)
3.一般每一个值还会要求输出一定的个数,可以在声明一个数组,次序当索引,个数为值
如:期望能按照"qwerqwerwe"的方式输出,
模板string temp="qwerqwerwe"
声明一个map,值为key次序为value,即m['q']=1;m['w']=2;m['e']=3;m['r']=4
再来一个count数组记录个数,count[1]=2;count[2]=3;count[3]=3;count[4]=2;
输出时遍历count数组个数
需要两个循环,while和for,外层的while保证了全部输出,for作用是一遍一遍地按照次序输出
while(true)
{
bool is_outing=false;
for(int i=1;i<5;i++)
{
if(count[i]!=0)
{
is_outing=true;//count[i]不等于0说明此时还有输出
cout<<temp[i-1];//输出模板对应位置上的字符值
count[i]--;
}
}
if(!is_outing)//当没输出了就跳出while循环
break;
}
题目:
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest....
这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
代码:
#include<iostream>
#include<map>
#include<vector>
using namespace std;
int main()
{
string test,temp="PATest";
map<char,int> m;
m['P']=1;m['A']=2;m['T']=3;m['e']=4;m['s']=5;m['t']=6;
int coun[7]={};
cin>>test;
for(int i=0;i<test.size();i++)
{
if(m[test.at(i)]!=0)
coun[m[test.at(i)]]++;
}
while(true)
{
bool is_outing=false;
for(int i=1;i<7;i++)
{
if(coun[i]!=0)
{
is_outing=true;
cout<<temp[i-1];
coun[i]--;
}
}
if(!is_outing)
break;
}
return 0;
}