/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
输入一个字符串,由括号(英文括号)、数字和大写字母组成,字符串中形如(2A),表示2个连续的A即’AA’,字符串中形如(4AB),表示4个连续的AB,括号无嵌套.请对其解码得到原始字符串!
示例1:
输入字符串:(5A)
解码后字符串:AAAAA

示例2:
输入字符串:(3AC)
解码后字符串:ACACAC

示例3:
输入字符串:(3C)(4AB)
解码后字符串:CCCABABABAB


(不符合要求格式的字符串可以忽略不做处理) 
------------------------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,仅在
Program-End之间填入若干语句。不要删除标志否则不得分。
----------------------------------------------------------------------*/
#include <stdio.h>  
#include <string.h>    
#include <ctype.h> 

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;  
}