⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 countlineswordschars.c

📁 著名的Parser库Spirit在VC6上的Port
💻 C
字号:
/* -*- mode: c -*-
 * $Id: CountLinesWordsChars.c,v 1.3 2001/10/20 15:43:19 nuffer Exp $
 * http://www.bagley.org/~doug/shootout/
 * Author: Waldemar Hebisch (hebisch@math.uni.wroc.pl)
 * Optimizations: Michael Herf (mike@herfconsulting.com)
 */

//#include <stdio.h>
//#include <unistd.h>

//#define CHAR int
//#define BSIZ 4096

unsigned long ws[256];
char buff[4096];

int main() {

    int w_cnt=0,l_cnt=0,b_cnt=0,cnt;
    unsigned long was_sp = 1;
    unsigned char *pp, *pe;

    /* Fill tables */
    for (cnt = 0; cnt < 256; cnt++) ws[cnt] = 0;

    /* also: ws['\r']=ws['\v']=ws['\f']= */
    ws[' ']=ws['\t']=ws['\n']=1;
    ws['\n']=65536 + 1;

    /* Main loop */
    while((cnt=read(0,buff,BSIZ))) {
        unsigned long tcnt = 0;

	b_cnt += cnt;
	pe = buff + cnt;
	pp = buff;

	while(pp < pe) {
	    tcnt += ws[*pp] ^ was_sp;
	    was_sp = ws[*pp] & 0xFFFF;
	    pp ++;
	}
	w_cnt += tcnt  & 0xFFFF;
	l_cnt += tcnt >> 16;
    }

    w_cnt += (ws[ buff[b_cnt&(BSIZ-1)-1] ]^1)&1;
    w_cnt>>=1;

    printf("%d %d %d\n", l_cnt, w_cnt, b_cnt);
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -