1、数字转字符串的函数
string to_str(int val);
//可以把数字转化为字符串
坑点:字符串中重复的字符可以大于10
压缩的时候,我的方法是利用字符串的replace ( )函数将相应的部分替换成数字+字母,但是这其中的过程比较繁琐,尤其是迭代器i的位置变化,容易出现问题,需要反复实验。
解压缩的时候同样,利用replace函数,遇到数字就执行解压缩操作。
网上看别人写的,感觉构造一个新的ans字符串,然后利用+=比较好。
解答:
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main()
{
string obj;
char ch;
ch=cin.get();
int count=0;int flag=0;
if(ch=='C')
{
ch=cin.get();//去除空格
getline(cin,obj);
obj.push_back('|');
obj.push_back('|');
for(int i=0;i<obj.size()-1;i++)
{
if(obj[i]==obj[i+1]&&!flag)
{ch=obj[i];flag=1;}
if(flag&&obj[i]==ch)
count++;
else if(flag){
flag=0;
string str=to_string(count);
obj.replace(i-count,1,str);
obj.replace(i-count+str.size(),count-1,1,ch);
i=i-(count-2);count=0;
i--;
}
}
obj.erase(obj.size()-2,2);
cout<<obj;
}
else
{ cin.get();
getline(cin,obj);
int num;
for(int i=0;i<obj.size();i++)
{
if(isdigit(obj[i]))
{
string num;int n;
for(int j=i;j<obj.size();j++)
{
if(isdigit(obj[j]))num.push_back(obj[j]);
else break;
}
n=stoi(num);
obj.replace(i,num.size()+1,n,obj[i+num.size()]);
}
}
cout<<obj;
}
}