小珂的编译器
题目描述
小珂今天刚学了编译原理,老师给她了一个作业。让他求出一段程序中给定的关键字的个数。请你帮她写一个程序,计算出结果并输出。
输入
第一行有一个整数1<n<=10,表示有n个测试数据。
随后的n组数据的每一行有一个整数0<m<=6,表示要统计的关键字的个数。接着是m行是m个关键字。接着是一段C++程序,遇到字符‘@’表示程序结束(保证‘@’占独立的一行)。同时保证,输入的一段无语法错误的C++程序段,不包括预处理语句,也就是不包含用‘#’开头的语句。同时保证所有的关键字一定是 char,double,float,const,int,string中的一个。程序的行数少于100行。同时保证,字符串中不会出现关键词或者包含关键词的单词。
随后的n组数据的每一行有一个整数0<m<=6,表示要统计的关键字的个数。接着是m行是m个关键字。接着是一段C++程序,遇到字符‘@’表示程序结束(保证‘@’占独立的一行)。同时保证,输入的一段无语法错误的C++程序段,不包括预处理语句,也就是不包含用‘#’开头的语句。同时保证所有的关键字一定是 char,double,float,const,int,string中的一个。程序的行数少于100行。同时保证,字符串中不会出现关键词或者包含关键词的单词。
输出
输出n行,统计出要求统计的关键字出现的总次数。
样例输入
2 4 char int double float int main() { int a=10; cout<<a<<endl; } @ 1 int int main() { int* p; } @
样例输出
2 2
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char str[1001];
int main()
{
char ch,s[7][10];
int t,n,num,k;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%s",s[i]);
num=k=0;
while(scanf("%c",&ch) && ch!='@'){
if((ch>='a' && ch<='z') || (ch>='0' && ch<='9') || ch=='_')
str[k++]=ch;
else{
for(int i=0;i<n;i++){
if(!strcmp(str,s[i])){
num++;
}
}
memset(str,0,sizeof(str));
k=0;
}
}
printf("%d\n",num);
}
return 0;
}