2016郑州大学ACM/ICPC训练赛 A 词法分析器

本文介绍如何在C程序源代码中快速找出并计数关键字if、while、for的数量,包括使用字符串匹配技巧和处理EOF的方法。详细解释了在不同操作系统下退出命令行操作的快捷键,以及代码实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description
小D正在学习编译原理,上机课时老师叫他写一个词法分析器,他琢磨了半天没写粗来,你能帮他么?

Input
输入单组数据。
每组数据都是一个可运行的C程序的源代码。

Output
为了简化问题,只需要你找出其中关键字“if”,“while”,“for”的数量即可(数量在1000以内)。

Sample Input

 #include <stdio.h>
 int main() {
     int a, b;
     while(scanf("%d %d", &a, &b) != EOF) {
        printf("%d\n", a + b);
     }
     return 0;
 }

Sample Output
1
HINT

代码C:

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

int main(int argc, const char * argv[])
{
    char code[1000];
    int sum = 0, j = 0, extent;
    while (~scanf("%s", code))
    {
        extent = (int)strlen(code);
        for (j = 0; j < extent; j++)
        {
            if (j + 1 < extent && code[j] == 'i' && code[j + 1] == 'f')
            {
                sum++;
            }
            if (j + 2 < extent && code[j] == 'w' && code[j + 1] == 'h' && code[j + 2] == 'i' && code[j + 3] == 'l' && code[j + 4] == 'e')
            {
                sum++;
            }
            if (j + 4 < extent && code[j] == 'f' && code[j + 1] == 'o' && code[j + 2] == 'r')
            {
                sum++;
            }
        }
    }
    printf("%d\n", sum);
    return 0;
}
这道题由于测试数据比较弱,所以是一道水题,然而当时由于考虑了太多,所以浪费了不少时间……
主要说的就是注意EOF的用法,之前一直对EOF存在误解,以为必须键入一个数值才能退出EOF,谁知道根本不是这样的,并不一定要通过在命令行中输入命令字符才可以退出。在win下,只要按住快捷键control+z即可,而在Linux和Mac的系统下,需要按住control+d。这样子就可以退出此操作了。之前一直不懂,这下子又弥补了一些知识漏洞了^_^
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值