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