字符串表达式展开(比如abc3[a]就为abcaaa,aa3[bc2[d]]e就为aabcddbcddbcdde)
给出一个表达式s,此表达式包括数字,字母以及方括号,在方括号前面的数字表示方括号里面的内容重复的次数(括号内的内容可以是字符串或另一个表达式),请编写程序将这个表达式展开成一个字符串。
输入样例:(每一行输入一个表达式)
abc3[a]
3[abc]
4[ac]dy
输出样例:(每一行输出表达式s展开成的字符串)
abcaaa
abcabcabc
acacacacdy
提示:样例没有给出嵌套的情况,但是题目说了括号内仍然可能是表达式,那就说明有嵌套用例的出现
附上代码
#include <stdio.h>
#include <ctype.h>
#include <string.h>
char str[10000], str1[10000];
int t, len;
int isString(char * str, int i)
{
    int num = 0;
    if (isalpha(str[i]))
    {
        str1[t++] = str[i];
    }
    else if (isdigit(str[i]))
    {
        while (isdigit(str[i])) // 可能不是一位数
        {
            num *= 10;
            num += str[i++] - 48;
        }
    }
    if (str[i] == '[')
    {
        ++i;
        int n;
        while (num--)
        {
            n = i;
            while (n < len && str[n] != ']')
            {
                if (isdigit(str[n]))
                {
                    n = isString(str, n);
                    if (str[n] == ']')    break;
                }
                str1[t++] = str[n++];
            }
        }
        i = n;
    }
    return i;
}
 
int main()
{
    scanf("%s", str);
    int i, j;
    len = strlen(str);
    for (i = 0; i < len; ++i)
    {
        i = isString(str, i);
    }
    for (j = 0; j < t; ++j)
    {
        putchar(str1[j]);
    }
    putchar('\n');
    return 0;
}========================================Talk is cheap, show me the code=======================================
    CSDN博客地址:https://blog.csdn.net/qq_34115899
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号