zoukankan      html  css  js  c++  java
  • 【C语言】对输入的字符串中C关键词的查找统计

    完成对输入的字符串中C关键词的查找统计。
    程序运行示例如下:
    本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:
    if do while while do break goto helloworld end
    您的输入中C语言关键字出现的次数统计如下:
    break     :      1
    do        :      2
    goto      :      1
    if        :      1
    while     :      2
    
    输入格式:
    "本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:
    "
    输出格式:
    "您的输入中C语言关键字出现的次数统计如下:
    "
    "%-10s: %6d
    "

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    #include<string.h>
    #define MAX 32
    struct Count {
        char* name;
        int count;
    };
    
    int main() {
        char s[10] = { 0 };
        struct Count arr[MAX] = {
            "auto", 0,
            "break",0,
            "case",0,
            "char",0,
            "const", 0,
            "continue",0,
            "default",0,
            "do", 0,
            "double",0,
            "else",0,
            "enum",0,
            "float",0,
            "for",0,
            "goto",0,
            "if",0,
            "int",0,
            "long",0,
            "register",0,
            "while", 0,
            "reuturn",0,
            "short",0,
            "signed",0,
            "sizeof",0,
            "static", 0,
            "struct",0,
            "switch",0,
            "typedef",0,
            "union",0,
            "unsigned",0,
            "void", 0 ,
            "volatile",0,
            "while", 0,
        };
        int i;
        printf("本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:
    ");
        while (strcmp(s, "end") != 0) {
            scanf("%s", s);
            for (i = 0; i < MAX-1; i++) {
                if (strcmp(s, arr[i].name) == 0) { // strcmp--字符串比较函数,如果两个字符串相等,返回值为0
                    arr[i].count++;
                }
            }
        }
        printf("您的输入中C语言关键字出现的次数统计如下:
    ");
        for (i = 0; i < MAX-1; i++) {
            if (arr[i].count != 0) {
                printf("%-10s: %6d
    ", arr[i].name, arr[i].count);
            }
        }
    }
    方法一(推荐)
     
    #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>
     
  • 相关阅读:
    [Vue warn]: Duplicate keys detected: '1'. This may cause an update error
    【转载】 github vue 高星项目
    前端面试题目汇总摘录(JS 基础篇)
    微信小程序-滚动Tab选项卡
    日期格式与标准时间之间互转
    git rebse 操作失误回退到上一步
    js判断数组中某个值是否存在
    git 不区分文件名大小写 解决办法
    React + antd 实现动态表单添加删除功能
    leetcode 重排链表
  • 原文地址:https://www.cnblogs.com/20201212ycy/p/14886256.html
Copyright © 2011-2022 走看看