题目:编写一个统计空格、制表符与换行符个数的程序
自我解答:
includeint main() { int c; double numSpace = 0.0, numTab = 0.0, numLF = 0.0; while((c = getchar()) != EOF) { if(c == ' ') numSpace++; else if(c == 't') numTab++; else if(c == 'n') numLF++; } printf("number of space: %.0fn", numSpace); printf("number of Table: %.0fn", numTab); printf("number of line feed(LF): %.0fn", numLF); }
运行结果:
当输入文本为(用t替代tab,用n代表一个换行符):
sdftn
dftn
123 45n
number of space: 1 number of Table: 2 number of line feed(LF): 3
参考答案:
#includeint main() { int c, nb, nt, nl; nb = 0; nt = 0; nl = 0; while((c = getchar()) != EOF) { if(c == ' ') ++nb; if(c == 't') ++nt; if(c == 'n') ++nl; } printf("%d %d %dn", nb, nt, nl); return 0; }
整形变量nb nt和nl分别用来统计空格、制表符和换行符的个数。这三个变量的初值都为0.
在while循环的循环体内,出现在输入中的每一个空格、制表符和换行符都将被记录。while循环中的3条if语句在每次循环中都将被执行。如果程序读到的字符不是空格、制表符或换行符,就不执行任何操作。如果程序读到的字符是这三个符号之一,就对相应的计数器加1.当while循环终止(即getchar返回EOF)时,本程序将把空格、制表符和换行符的统计结果打印出来。
对if-else语句的介绍最早出现于教材第14页,下面是使用了这一语法结构的实现方式:
#includeint main() { int c, nb, nt, nl; nb = 0; nt = 0; nl = 0; while((c = getchar()) != EOF) { if(c == ' ') ++nb; else if(c == 't') ++nt; else if(c == 'n') ++nl; } printf("%d %d %dn", nb, nt, nl); return 0; }
补充:
实现上没有本质不同,参考答案中仍然保持了“有注释”、“变量定义和初始化分开”和“变量定义简洁”几个特点,这是需要借鉴的地方。当然参考答案在打印时并没有清晰的指出数值的具体含义。



