有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压缩密码,外星人对于连续的若干个相同的子串 XX 会压缩为 [DX][DX] 的形式(DD 是一个整数且 1≤D≤991≤D≤99),比如说字符串 CBCBCBCBCBCBCBCB 就压缩为 [4CB][4CB] 或者[2[2CB]][2[2CB]],类似于后面这种压缩之后再压缩的称为二重压缩。如果是 [2[2[2CB]]][2[2[2CB]]] 则是三重的。现在我们给你外星人发送的密码,请你对其进行解压缩。
输入一行,一个字符串,表示外星人发送的密码。
输出一行,一个字符串,表示解压缩后的结果。
AC[3FUN] ACFUNFUNFUN #include #include using namespace std; string expand(){ string s="",x; char c; int d; while(cin>>c){ if(c=='['){ cin>>d; x=expand(); while(d--)s+=x; } else if(c==']')return s; else s+=c; } return s; } int main(){ cout< 这段代码实现了一个字符串展开功能。它可以处理一种特殊格式的输入,并将其展开成一个普通字符串。让我来详细解释一下:
expand() 函数是核心功能:
处理逻辑:
expand()main() 函数:
expand()输入格式示例:
abc[3[d]]e将被展开为abcdddcdddcdddea[2[b[2[c]]]]将被展开为abccbccbccbcc工作原理: