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\n",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\n",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\n",i+1); } } } }