C++最简单的字符串解码问题

例如输入a3,解码后就是aaa;输入goo12le就是gooooooooooooole;输入XXX为结束。鄙人新手,点都不会.....
麻烦来点简单的...初学者,不会高深的语法。最好是循环解决的....

阅读 4.7k
3 个回答
  1. 利用栈,将字符串不断入栈。

  2. 当读取到数字时,进行解析,得到结果n。

  3. 读取栈顶元素,利用2中的结果进行n次push操作。

    auto decode = [](string origin)
    {
        vector<char>target;
        for (int pos, i = 0; i < origin.length(); )
        {
            if (origin[i] >= 'a'&&origin[i] <= 'z')
            {
                target.push_back(origin[i]);
                pos = i++;
            }
            else if (origin[i] >= '0'&&origin[i] <= '9')
            {
                int count = 0;
                while (origin[i] >= '0'&&origin[i] <= '9')
                {
                    count *= 10;
                    count+=origin[i++] - '0';
                }
                do { target.push_back(origin[pos]); } while (--count);
            }
            //if have other char
            else i++;
        }
        // last : vector -> string
        char *buffer = new char[target.size()+1];
        for (int i = 0; i < target.size(); i++)
            buffer[i] = target[i];
        buffer[target.size()] = '\0';
        auto result = string(buffer);
        delete[] buffer;
        return result;
    };

记录1个pos就行了。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string src;         //输入的字符串 
    char dst[1024];     //暂存解码字符串的buf 
    
    getline(cin,src);   //从标准输入得到待解码字符串 
    
    int srcLen=src.length(); 
    int dstIndex=0;
    for(int i=0;i<srcLen;++i)  //顺序处理待解码字符串 
    {
        if(!(src[i]>='0' && src[i]<='9'))  //遇到非数字字符直接保存 
        {
            dst[dstIndex++]=src[i];
        }
        else
        {
            if(0==i) exit(1);    //如果第一个字符就是数字,输入出错 
            char ch=src[i-1];    //保存要重复的字符 
            int repeatTimes=0;
            while(i<srcLen && src[i]>='0' && src[i]<='9')  //计算字符重复次数 
            {
                repeatTimes*=10;
                repeatTimes+=src[i]-'0';
                
                ++i;
            }
            --i;
            
            for(int j=0;j<repeatTimes-1;++j)  //重复字符 
            {
                dst[dstIndex++]=ch;
            }
        }
    }
    dst[dstIndex]='\0';

    src=dst;     //保存解码后的字符串 
    cout<<src<<endl;
    
    system("pause");
    return 0;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题