简明现代魔法 -> C/C++ -> C 程序设计:行计数

C 程序设计:行计数

2010-02-17

问题:编写程序统计输入中的行数。

标准库保证输入文本流以行序列的形式出现,每一行均以换行符结束。所以,统计行数等价于统计换行符的个数。

#include <stdio.h>

/* 统计输入中的行数 */
main()
{
	int c, n1;
    
    n1 = 0;
    while((c = getchar()) != EOF)
    	if(c == '\n')
        	++n1;
    printf("%d\n", n1);
}

单引号中的字符表示一个整型值,该值等于此字符在机器字符集中对应的数值,称为字符常量。双引号里的则是字符串,比如 "\n" 表示换行,而 '\n' 则表示单个字符,它在 ASCII 字符集中的值为 10。

 

同样,我们可以解决更多同类问题。

问题:统计空格、制表符、换行符的个数

#include <stdio.h>

/* 统计空格、制表符与换行符个数 */
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 %d\n", nb, nt, nl);
}

整型变量 nb, nt, nl 分别用来统计空格、制表符和换行符的个数。

 

问题:编写一个将输入复制到输出的程序,并且将其中连续多个空格用一个空格代替。

#include <stdio.h>

#define NONBLANK 'a'

main()
{
	int c, lastc;
    
    lastc = NONBLANK;
    
    while((c = getchar()) != EOF)
    {
    	if(c != ' ' || lastc != ' ')
        	putchar(c);
        lastc = c;
    }
}

运行结果如下图所示:

整型变量 c 负责记录当前输入字符的 ASCII 值,而 lastc 则记录前一个输入字符的 ASCII 值。符号常量 NONBLANK 负责把变量 lastc 初始化为一个任意的非空格字符。

程序的逻辑设计如下:

随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们