题目是老师让进行找规律,然后写出代码实现,当场没写出来
题目:
输入:2[a3[b]d]ef
输出:abbbdabbbdef
输入:aa2[bc3[d]]e
输出:aabcdddbcddde
很容易就看出来测试用例,但好久没写代码了,居然弄不清楚那个递归调用应该怎么弄。
接下来粘贴一下代码,实现起来其实很简单,就一个简单的递归调用就可以实现,但注意:以下代码比较简单,没有考虑各种出错的情况,在面试的时候大家最好还是将错误分析的越清楚越好,这个代码只是单纯实现了正确输入时的操作情况。
对于位置的访问我直接定义了一个全局变量,如果不使用全局变量在数据调用的时候一定要注意位置标记传递的一定要是它所在的地址参数,否则会出错。
#include<iostream>
using namespace std;
int i=0;
//注意这里传递位置的话如果不设置全局变量一定要用指针传递,否则在函数里面值的改变对外面的数据不会有影响。
string ret(string s){
string value="";
while(i<s.size()){
if(s[i]>='0'&&s[i]<='9'){
int num=0;
// 表示这是一个数字
while(s[i]!='['){
num=num*10+s[i]-'0';
i++;
}
i++;//跳过'['
string values=ret(s);
for(int j=0;j<num;j++){
cout<<value<<endl;
value+=values;
}
}
else if(s[i]==']'){
i+=1;
return value;
}
else{
// 这里可以处理字符串了
value+=s[i++];
}
}
return value;
}
int main(){
string s;
cin>>s;
//为了多加几次测试用例用了一个while循环读取数据
while(s!="#"){
cout<<ret(s)<<endl;
cin>>s;
}
}