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
  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/try-again/p/5028928.html
Copyright © 2011-2022 走看看