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

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。这样子就可以退出此操作了。之前一直不懂,这下子又弥补了一些知识漏洞了^_^
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
程序员猪皮:看不到八股什么意思
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务