去哪网:
1,译码;在给出的一个字符串中,将字符串中间的两个数字中间的字母复制最后一个数字遍数,并且假设当数字连续时,以第一个数字为主。例如wdsad2dfgh3ij.则翻译成:wdsadwdsad2dfghdfghdfgh3ij.例如312qy324wu352we则翻译成:312qyqyqy324wuwuwu352we.
代码为:
#include<iostream>
#include<string>
using namespace std;
string translate(string des);
string return_s(string str1,int n);
string translate(string source)
{
string des;
// string copyst(source);
int i,j=0;
//寻找第一个不为数字的字符下标;
while(j!=source.size())
{
if((source[j]<='9')&&(source[j]>='0')) //若字符为数字,则跳过。
{
j++;
}
else //寻找到第一个非数字的字符。
break ;
}
string str1(source,0,j);
des=des+str1; //连接
j--;
i=j+1;
while(i!=source.size()) //未到字符串末尾
{
if(((source[i]<='9')&&(source[i]>='0'))&&(((source[i-1]>'9')||(source[i-1]<'0')))) //若i个为数字且i-1个不是数字,则j和i之间的需要重复
{
string copyst(source,j+1,i-j-1); //copst为欲重复的字符串
des=des+return_s(copyst,source[i]-'0'); //将返回的字符串连接到目标字符串中
j=i; //j指向i原来的位置
}
else if(((source[i]<='9')&&(source[i]>='0'))&&(((source[i-1]<='9')&&(source[i-1]>='0')))) //若i个为数字且i-1个也是数字。
{
j=i;
des=des+source[i];
}
i++;
}
// 对字符末尾经行处理
string str2(source,j+1,source.size()-j-1);
des=des+str2;
return des;
}
string return_s(string str1,int n)
{
string st;
char mun[10];
int i=0;
for(;i<n;i++)
{
st=st+str1;
}
// st=st+'n';
itoa(n,mun,10); //将整数与字符串相连接,需要先把整数转化成字符型
st=st+mun;
return st;
}
void main()
{
string sour="312qy324wu352we";
string dest;
dest=translate(sour);
cout<<"结果为:"<<dest<<endl;
}
运行结果为:
算法是用C++实现的,而且实现的比较笨重。不知哪位高手有效率高的算法。