Untitled
unknown
plain_text
a year ago
3.3 kB
8
Indexable
#include <iostream> #include <cstring> #include <cmath> #include <cstdio> using namespace std; int extractInt(const char src[], int& index, int& depth) { /* **************************Task-1*************************** TODO: Given a string consisting of numeric charaters and English letters (e.g,"10{aaaa}"), return the integer value of the numeric charater(s) (e.g, 10 in this case) with recursive approach. Input: const char src[]: char array int& index: the index of array int& depth: the recursion depth Output: return the int value of the the numeral in the char array */ int current_number = src[index] - '0'; if (src[index + 1] == '{') { depth = 1; index += 2; return current_number; } else { int to_add = extractInt(src, ++index, depth); return current_number * pow(10, depth); } } void repeatString(char str[], int repeat_times, char repeated_str[]) { /* **************************Task-2*************************** TODO: implement a function to Recursively repeat the input string Input: char str[]: char array int repeat_times: the repeated times of str char repeated_str[]: the repeated char array to be return Output: void, str string is copied into char repeated_str */ if (repeat_times <= 0) return; strcat(repeated_str, str); repeatString(str, repeat_times - 1, repeated_str); } void recursiveDecode(const char src[], int& index, char decoded[]) { /* **************************Task-3*************************** TODO: implement a function to Recursively generate a new string by removing the braces and repeat the string inside braces. Input: char src[]: char array int& index: the index of array char decoded[]: the decoded string to be return Output: void, the decoded string is copied into char decoded[] */ int len = strlen(src); if (index >= len) { return; } char ch = src[index]; if ((ch <= '9') && (ch >= '0')) { int dep = 0; int repeat_times = extractInt(src, index, dep); char part_decoded[1000] = {}; recursiveDecode(src, index, part_decoded); char to_add[1000] = {}; repeatString(part_decoded, repeat_times, to_add); strcat(decoded, to_add); if (index < len) { char next_part_decoded[1000] = {}; recursiveDecode(src, index, next_part_decoded); strcat(decoded, next_part_decoded); } } else if (ch == '}') { ++index; return; } else { int len_decoded = (unsigned)strlen(decoded); decoded[len_decoded++] = src[index++]; if (src[index + 1] == '}') { index += 2; return; } char next_part_decoded[1000] = {}; recursiveDecode(src, index, next_part_decoded); strcat(decoded, next_part_decoded); } } // Driver program int main() { char s[1000]={}; char decoded[1000] = {}; int index = 0; // cout << "input string: " << endl; cin >> s; recursiveDecode(s, index, decoded); // cout << "output string: " << endl; cout << decoded << endl; return 0; }
Editor is loading...
Leave a Comment