/*---------------------------------------------------------------------- 【程序设计】 ------------------------------------------------------------------------ 输入一个字符串,由括号(英文括号)、数字和大写字母组成,字符串中形如(2A),表示2个连续的A即’AA’,字符串中形如(4AB),表示4个连续的AB,括号无嵌套.请对其解码得到原始字符串! 示例1: 输入字符串:(5A) 解码后字符串:AAAAA 示例2: 输入字符串:(3AC) 解码后字符串:ACACAC 示例3: 输入字符串:(3C)(4AB) 解码后字符串:CCCABABABAB (不符合要求格式的字符串可以忽略不做处理) ------------------------------------------------------------------------ 注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,仅在 Program-End之间填入若干语句。不要删除标志否则不得分。 ----------------------------------------------------------------------*/ #include #include #include int parseNumber(const char *str, int *index) { int num = 0; while (str[*index] >= '0' && str[*index] <= '9') { num = num * 10 + (str[*index] - '0'); (*index)++; } return num; } void decodeString(char *s, char *out) { char *p_read = s; char *p_write = out; char buf[64] = {0}; int digit_len = 0; int repeats = 0; while (*p_read){ /**********Program**********/ if(*p_read == '('){//找到左括号 //(3AC) digit_len = 0;//数字的长度 repeats = parseNumber(++p_read, &digit_len);//取出数字部分 p_read+=digit_len; //定位到字符 digit_len = 0; while(*p_read != ')'){ buf[digit_len++]=*p_read++; }//将需要输出字符存储到buf中 buf[digit_len]='\0'; //按存储的个数打印 while(repeats--){ out = strcat(out, buf); } } p_read++; /********** End **********/ } } int main() { char s[32] = {0}; char result[512] = {0}; printf("输入字符串s:"); scanf("%s", s); decodeString(s, result); printf("解码后字符串:%s", result); return 0; }