#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define N 1024

typedef unsigned int __u32;

char *decode(const char *src)
{
	const char *pnumb = src;
	const char *pchar = src; 	
	__u32 chartoint;
	__u32 offset;
	char *cdest;
	char *res;

	res = (char *)malloc(sizeof(char) * N);
	if (!res)
	{
		/* code */
		printf("allocate memory failed!.\n");
		exit(1);
	}
	*res = '\0';

	while(*pchar){

		if (isalpha(*pchar))
		{
			/* code */
			pnumb = pchar;
	
			while(!isdigit(*pnumb))
			{
				pnumb++;
			}

			offset = pnumb - pchar;
			chartoint = (int)(*pnumb - '0');

			while(chartoint)
			{
				cdest = (char *)malloc((offset + 1)*sizeof(char));
				if (!res)
				{
					/* code */
					printf("allocate memory failed!.\n");
					exit(1);
				}

				strncpy(cdest, pchar, offset);
				*(cdest + offset) = '\0';
				strcat(res, cdest);
				free(cdest);
				chartoint--;
			}
		}

		pchar = pnumb + 1;
	}

	return res;
}

int main(int argc, char const *argv[])
{
	/* code */
	char *res;

	char str[] = "a2bc3d1";

	res = decode(str);
	if (!res)
	{
		/* code */
		printf("decrypt error!.\n");
		goto end;
	}

	printf("After decrypt, the result is: %s\n", res);
	free(res);

end:
	return 0;
}