zoukankan      html  css  js  c++  java
  • 第六章 结构

    6.4 指向结构的指针

    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
    #define MAXWORD 100
    //int binsearch(char *, struct key *, int);
    #define NKEYS (sizeof keytab / sizeof(keytab[0]))
    #define BUFSIZE 100
    int getword(char *, int);
    char buf[BUFSIZE];
    int bufp = 0;
    
    struct key {
        char *word;
        int count;
    } keytab[] = {
        "auto", 0,
        "break", 0,
        "case", 0,
        "char", 0,
        "const", 0,
        "continue", 0,
        "default", 0,
        /* ... */
        "unsigned", 0,
        "void", 0,
        "volatile", 0,
        "while", 0
    };
    /* count C keywords */
    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
    ", keytab[n].count, keytab[n].word);
    
        return 0;
    }
    
    /* binsearch: find word in 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: get next word or character from input */
    
    int getword(char *word, int lim)
    {
        int c, getch(void);
        void ungetch(int);
        char *w = word;
        while (isspace(c = getch()))
            ;
        if (c != EOF)
            *w++ = c;
        if (!isalpha(c)) {
            *w = '';
            return c;
        }
        for ( ; --lim > 0; w++)
            if (!isalnum(*w = getch())) {
                ungetch(*w);
                break;
        }
        *w = '';
        return word[0];
    }
    int getch(void) /* get a (possibly pushed-back) character */
    {
        return (bufp > 0) ? buf[--bufp] : getchar();
    }
    void ungetch(int c) /* push character back on input */
    {
        if (bufp >= BUFSIZE)
            printf("ungetch: too many characters
    ");
        else
            buf[bufp++] = c;
    }
    终端输出显示:
    da
    gfa
    ray
    allen
    auto
    void
    los
    static
    register
    break
    ls
    case
    void
    auto
    break
    continue
       2 auto
       2 break
       1 case
       1 continue
       2 void
  • 相关阅读:
    springboot 实现 aop
    使用@import导入实现了ImportBeanDefinitionRegistrar接口的类,不能被注册为bean
    Spring Boot 动态数据源(多数据源自动切换)
    springboot2动态数据源的绑定
    三分钟学会@Autowired@Qualifier@Primary注解
    java复制文件的4种方式
    五款最好的免费同步软件
    springboot2多数据源完整示例
    WebSocket 结合 Nginx 实现域名及 WSS 协议访问
    Spring的注解@Qualifier注解
  • 原文地址:https://www.cnblogs.com/try-again/p/5028928.html
Copyright © 2011-2022 走看看