2010年4月17日 星期六

Problem 11541 Decoding,解碼

此題要將一個字串解碼成原本的字串,這字串之中,是一個字元 ch 與一個整數 n 相間,而這個整數 n 代表這一個字元 ch 要印出 n 次,也就是說,例如 A5B6 就要印出 AAAAABBBBBB。

首先我的方法就是用 ctype 內判斷字元的 isalpha() 函式依字串順序判斷它是不是字元,如果是則記錄;如果不是字元,則為整數,但這整數有長有短,所以要用 count = count * 10 + str[i] - '0'; 來累加。字有了,整數也有了,就將這次的結果印出,依此類推,就可以印出正確答案。 C 語言程式碼如下:
printf("Case %d: ", i);
scanf("%s", str);
for (j = 0; str[j]; j ++)
{
if (isalpha(str[j])) ch = str[j], isPut = 1, count = 0;
else if (isPut && isdigit(str[j]))
count = count * 10 + str[j] - '0';
if (isPut && str[j + 1] == '\0' || !isdigit(str[j + 1]) && count > 0)
{
while (count --)
printf("%c", ch);
isPut = 0;
}
}
printf("\n");

By David.K

p11541題目連結
回ACM題庫目錄
回首頁

沒有留言: