北航 2012年考研复试题3

3.【问题描述】

统计关键字出现位置

输入:

一行标准c语言代码(字符个数小于300),统计出该字符串中关键字的if,while,for所在的位置,按照关键字出现的顺序依次输出。注意双引号内的不需要统计。
输入:一行标准c语言代码,字符个数小于300
输出:

关键字if,while,for对应的位置,按照关键字出现的顺序依次输出。输出格式为:关键字,后跟冒号,然后是出现的位置。扫描到关键字就输出,每个输出占一行。
样例输入:

#include <stdio.h> int main() {int i = 0; if(i == 0) printf("YES"); return 0;}
#include <stdio.h> int main() {int ifwhile = 0; int forif = 1;char if_for_while = 'a';char *str = "while"; while(ifwhile == 0) {ifwhile = 1;forif = 0;} if(forif == 0) {if_for_while = 'b';} if(ifwhile == 1) {if_for_while = 'c';} return 0;}

样例输出:

if:43
while:88
if:133
if:170


#include <string.h> #include <stdio.h> char s[302]; main() { int i, j, k, l, m, n, w; // freopen("2012_3_string.txt","r",stdin);// bool valid; i = 0, w = 0; while( gets(s) ){ l = strlen(s); //cout << l << endl; valid = 1; for(i=0;i<l;i++){ if( s[i] == '"' ) valid = 1 - valid; //第一次遇到双引号将valid赋值为0,下面的IF语句始终无法执行, //第二次遇双引号将valid赋值为1,下面语句开始执行 if( !valid ) continue;//屏蔽双引号内的东西 if( s[i] == 'i' ){ if( s[i+1] == 'f' && ( s[i+2] == ' ' || s[i+2] == '(' ) && ( s[i-1] == ' ' || s[i-1] == ';' ) )//无法判断第一个字符 printf("if:%d ",i+1); } else if( s[i] == 'w' ){ if( s[i+1] == 'h' && s[i+2] == 'i' && s[i+3] == 'l' && s[i+4] == 'e' && ( s[i+5] == ' ' || s[i+5] == '(' ) && ( s[i-1] == ' ' || s[i-1] == ';' ) ) printf("while:%d ",i+1); } else if( s[i] == 'f' ){ if( s[i+1] == 'o' && s[i+2] == 'r' && ( s[i+3] == ' ' || s[i+3] == '(' ) && ( s[i-1] == ' ' || s[i-1] == ';' ) ) printf("for:%d ",i+1); } } } }
原文地址:https://www.cnblogs.com/Xilian/p/3826428.html