天天看点

字符串解压缩实现代码

//输入字符串压缩时格式为: AB[2|ABC] 
//输出字符串解压后格式: ABABCABC

#include <iostream>
#include <string>
#include <string.h>
#include <queue>
using namespace std;

int main() {
	string s;
	cin >> s;
	int j = s.length();
	vector<char>s2;
	string ans = "";
	char l = '0';   //左边,用以记录'['
	char m = '0';   //中间,用以记录'|'
	int k2 = 0;   //记录|前面的那个数。
	for (int i = 0; i < j; i++) {
		if (s[i] == '[') {
			l = '['; continue; 
		}
		else if (s[i] == '|') {
			m = '|'; continue; 
		}
		else if (s[i] == ']') {
			l = '0'; m = '0';
			int j3 = s2.size();
			for (int i2 = 0; i2 < k2; i2++) {
				for (int i3 = 0; i3 < j3; i3++) {
					ans = ans + s2[i3];
				}
			}
			s2.clear(); k2 = 0;
		}
		else if (s[i] > '0' && s[i] <= '9') {
			k2 = k2 * 10 + ((int)s[i] - 48);
		}
		else if (l == '[' && m == '|') { 
			s2.push_back(s[i]); 
		}
		else { 
			ans = ans + s[i];
		}
	}
	cout << ans;
	return 0;
}
           

大体思路是先把可能的边界情况给处理好,这貌似是写代码的一个“规矩”?然后再去处理常规的情况。

继续阅读