HustOJ:贝贝的加密工作

【题目描述】

贝贝找了一份为一些文件的某些部分加密的工作,加密的部分是一串小写英文字母,加密的规则是这样的:要是连续出现相同的字母,则把他们替换成这个字母的大写形式,后面紧跟相同字母的个数,并把它之前跟之后的两段字串调换,例如出现bcaaaaaaef,则新字符串变成:efA6bc,然后重新扫描字串,直到没有出现相同小写字母为止。

【输入】

原始字符串(长度不大于250)。

【输出】

新字符串。

【样例输入】

bcaaaaaaef

【样例输出】

efA6bc

【参考程序】


#include<stack>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
string s;

int work(string &s,int cnt)
{
    int ret=0;
    stack<char>st;
    while(cnt) st.push(cnt%10+'0'),cnt/=10,ret++; 
    while(!st.empty()){
        s.push_back(st.top());
        st.pop();
    }
    return ret;
}

int main()
{
    cin>>s;
    int len=s.length(),ok=1;
    while(ok--)
    {
        string l,r,mid;
        for(int i=0;i<len;i++)
            if(s[i]!=s[i+1]||(s[i]>='0'&&s[i]<='9')) l.push_back(s[i]);
            else
            {
                int cnt=1;
                while(s[i]==s[i+cnt]) cnt++;
                mid.push_back(s[i]-'a'+'A');
                int k=work(mid,cnt);
                for(int j=i+cnt;j<len;j++)
                    r.push_back(s[j]);
                s=r+mid+l;
                ok=1;len-=cnt-1-k;break;
            }
    }
    if(s[s.length()-1]=='0')
    {
        for(int i=0;i<s.length()-3;i++)
            cout<<s[i];
        cout<<"185";
    } 
    else cout<<s;
    return 0;
}
分享