• 完成对输入的字符串中C关键词的查找统计。


    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
     
    #define MAXWORD 80
     
    #define NKEYS (sizeof(keytab) / sizeof(struct key))
     
    struct key
    {       
        char *word;
        int count;
    }        keytab[] =
    {       
        "auto", 0,
        "break", 0,
        "case", 0,
        "char", 0,
        "const", 0,
        "continue", 0,
        "default", 0,
        "do", 0,
        "double", 0,
        "else", 0,
        "enum", 0,
        "extern", 0,
        "float", 0,
        "for", 0,
        "goto", 0,
        "if", 0,
        "int", 0,
        "long", 0,
        "register", 0,
        "return", 0,
        "short", 0,
        "singed", 0,
        "sizeof", 0,
        "static", 0,
        "struct", 0,
        "switch", 0,
        "typedef", 0,
        "union", 0,
        "unsigned", 0,
        "void", 0,
        "volatile", 0,
        "while", 0
    }       ;
     
    void getword(char *, int);
    int binsearch(char *, struct key *, int);
     
    int main(int argc, char *argv[])
    {       
        int n;
        char word[MAXWORD];
     
        printf("本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:
    ");
        do
        {       
            getword(word, MAXWORD);
            if (isalpha(word[0]))
            {       
                if ((n = binsearch(word, keytab, NKEYS)) >= 0)
                {       
                    keytab[n].count++; //找到则对应次数+1
                }
            }
     
        }
        while (strcmp(word, "end") != 0);
     
        printf("您的输入中C语言关键字出现的次数统计如下:
    ");
        for (n = 0; n < NKEYS; n++)
        {       
            if (keytab[n].count > 0)
            {       
                printf("%-10s: %6d
    ", keytab[n].word, keytab[n].count);
            }
        }
     
        return 0;
    }       
     
    /* 折半查找:在tab[0]到tab[n-1]中查找word */
    int binsearch(char *word, struct key tab[], int n)
    {       
        int result;
        int low, high, mid;
     
        low = 0;
        high = n - 1;
        while (low <= high)
        {       
            mid = (low + high) / 2;
            if ((result = strcmp(word, tab[mid].word)) < 0)
            {       
                high = mid - 1;
            }
            else if (result > 0)
            {       
                low = mid + 1;
            }
            else
            {       
                return mid;
            }
        }
        return -1;
    }       
     
    /* getword:从输入中获取某个单词 */
    void getword(char *word, int lim)
    {       
        int c;
        void ungetch(int);
        char *w = word;
     
        while (isspace(c = getchar()))
        {       
        }
        if (c != EOF)
        {       
            *w = c;
            w++;
        }
        if (!isalpha(c))
        {       
            *w = '';
        }
        for ( ; --lim > 0; w++)
        {       
            if (!isalnum(*w = getchar()))
            {       
                //读入的某个字符不是字母,则将它退还给输入缓冲区
                ungetch(*w);
                break;
            }
        }
        *w = '';
    }    
    

    ctype.h是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等。既支持单字节(Byte)字符,也支持宽字符。

  • 相关阅读:
    数据结构与算法实例(数组实现)
    从王者荣耀看设计模式(二十三.访问者模式)
    20172319 2018-3_2018-7《程序设计与数据结构》课程总结
    哈夫曼编码
    20172319 实验三《查找与排序》实验报告
    20172319 《程序设计与数据结构》 第九周学习总结
    20172319 实验二《树》实验报告
    20172319 《程序设计与数据结构》 第八周学习总结
    20172319 《程序设计与数据结构》 第七周学习总结
    20172319 《程序设计与数据结构》 第六周学习总结
  • 原文地址:https://www.cnblogs.com/HBU-xuhaiyang/p/12520672.html
Copyright © 2020-2023  润新知