C_结构体统计关键字次数

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define MAXWORD 100
#define NKEYS (sizeof keytab / sizeof(struct key))

struct key{
    char *word;
    int count;
}keytab[] = {
    "auto", 0,
    "break", 0,
    "case", 0,
    "char", 0,
    "default", 0,
    "void", 0,
    "while", 0
};

int getword(char *, int);
int binsearch(char *, struct key *, int);

// 统计输入中c语言关键字的出现次数
int main()
{
    int n;
    char word[MAXWORD];

    while (getword(word, MAXWORD) != EOF)
        if (isalpha(word[0]))
            if ((n = binsearch(word, keytab, NKEYS)) >= 0)
                keytab[n].count++;
    for (n = 0; n < NKEYS; n++)
        if (keytab[n].count > 0)
            printf("%4d %s\n",keytab[n].count,keytab[n].word);
    return 0;
}

// binsearch函数:在tab【0】到tab【n-1】中查找单词
int binsearch(char *word, struct key tab[], int n)
{
    int cond;
    int low, high, mid;

    low = 0;
    high = n - 1;
    while (low <= high){
        mid = (low + high)/2;
        if ((cond = strcmp(word,tab[mid].word)) < 0)
            high = mid - 1;
        else if (cond < 0)
            low = mid + 1;
        else
            return mid;
    }
    return -1;
}

// getword函数:从输入中读取下一个单词或字符串
int getword(char *word, int lim)
{
    int c, getch(void);
    void ungetch(int);
    char *w = word;

    while (isspace(c = getchar()))
        ;
    if (c != EOF)
        *w++ = c;
    if (!isalpha(c)){
        *w = '\0';
        return 0;
    }
    for ( ; --lim > 0; w++)
    if (!isalnum(*w = getch())){
        ungetch(*w);
        break;
    }
    *w = '\0';
    return word[0];
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值