參考資訊:
https://www.cnblogs.com/grandyang/p/5849037.html
題目:
解答:
char* decodeString(char* s) { #define S_MAX_SIZE (300 * 30) int v = 0; int c0 = 0; int c1 = 0; int r_idx = 0; int num_idx = 0; int buf_idx = 0; int num[30] = { 0 }; int len = strlen(s); char *r = NULL; char buf[30][S_MAX_SIZE] = { 0 }; r = malloc(S_MAX_SIZE); memset(r, 0, S_MAX_SIZE); for (c0 = 0; c0 < len; c0++) { if (isdigit(s[c0])) { v = (10 * v) + (s[c0] - '0'); continue; } switch (s[c0]) { case '[': num[num_idx++] = v; strcat(buf[buf_idx++], r); v = 0; r_idx = 0; memset(r, 0, S_MAX_SIZE); break; case ']': int n = num_idx - 1; int b = buf_idx - 1; for (c1 = 0; c1 < num[n]; c1++) { strcat(buf[b], r); } strcpy(r, buf[b]); buf[b][0] = 0; r_idx = strlen(r); num_idx -= 1; buf_idx -= 1; break; default: r[r_idx++] = s[c0]; break; } } return r; }