例如输入a3,解码后就是aaa;输入goo12le就是gooooooooooooole;输入XXX为结束。鄙人新手,点都不会.....
麻烦来点简单的...初学者,不会高深的语法。最好是循环解决的....
例如输入a3,解码后就是aaa;输入goo12le就是gooooooooooooole;输入XXX为结束。鄙人新手,点都不会.....
麻烦来点简单的...初学者,不会高深的语法。最好是循环解决的....
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;
}
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
利用栈,将字符串不断入栈。
当读取到数字时,进行解析,得到结果n。
读取栈顶元素,利用2中的结果进行n次push操作。