问题链接:UVA445 Marvelous Mazes。
题意简述:输入若干行字符串,将其转换为另外一个字符串输出。字符串中包括数字、大小写字母、"*"、"b"和"!",遇见"!"则输出换行;遇见连续的数字则将这些数字求和,之后输出和个数的字母或空格;遇见"b"则输出空格(若干个);遇见字母则输出字母(若干个)。
问题分析:(略)。
程序说明:封装了函数mygets()(函数gets()在新标准中,被建议不要使用,作用就自己做一个),其他都是套路。使用函数putchar()输出,要比使用函数printf()效率高一些。
AC的C语言程序如下:
/* UVA445 Marvelous Mazes */ #include <stdio.h> #include <ctype.h> #include <string.h> #define MAXN 256 int mygets(char s[]) { int i = 0; char c; while((c = getchar()) && c != ' ' && c != EOF) s[i++] = c; s[i] = ' '; return i > 0 || c != EOF; } int main(void) { char s[MAXN]; int sum, len, i, j; while(mygets(s)) { len = strlen(s); sum=0; for(i=0; i<len; i++) { if(isdigit(s[i])) sum += s[i] - '0'; /* 数字的话计算输出个数 */ else if(s[i] == '!') putchar(' '); /* '!'的话,输出换行 */ else { /* 如果是字母b,则输出若干个空格;如果是其他字母怎输出若干个该字母 */ for(j=sum; j>0; j--) putchar((s[i] == 'b') ? ' ' : s[i]); sum=0; /* 个数清零 */ } } putchar(' '); } return 0; }