北航计算机机试12统计关键字位置

来源:互联网 发布:鸿鹄焉知燕雀之志图片 编辑:程序博客网 时间:2024/06/05 02:31

统计关键字出现位置
输入:
一行标准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:43while:108if:153if:190

首先你要知道C语言对于变量的命名规则:
标识符只能由英文字母,数字和下划线组成;
标识符必须以字母或者下划线开头;
不允许使用关键字。

思路:我总觉得是我太死板了,本来准备用下数据结构或者什么算法,发现还没有直接暴力来的妥当。。。。。
思路就是:
有两个封闭

不会用markdown画流程图,上手了

#include<stdio.h>#include<string.h>#define N 300int iswhat(char sign);int main(){    char a[N];    //fgets(a,sizeof(a),stdin);    FILE *fp;    if((fp=fopen("demo.txt","r"))!=NULL)    {        fgets(a,N,fp);        puts(a);        fclose(fp);    }    int flag=0;//标志是否在双引号中    int isblack=0;//标志是否是非字母,数字,下划线和双引号    int len=strlen(a)-1;    for(int i=0;i<len;i++)    {        if(iswhat(a[i])==4 || flag==0)        {             if(iswhat(a[i])==0)             {                isblack=1;             }            else if(isblack==1 && iswhat(a[i])==1)//第一个字母            {                if(a[i]=='i'&& a[i+1]=='f' && iswhat(a[i+2])==0 && i+2<len)                     printf("if:%d\n",i+1);                else if(a[i]=='w' && a[i+1]=='h' && a[i+2]=='i'&& a[i+3]=='l'&&a[i+4]=='e'&&iswhat(a[i+5])==0&&i+5<len)                    printf("while:%d\n",i+1);                       else if(a[i]=='f' && a[i+1]=='o' && a[i+2]=='r' && iswhat(a[i+3])==0 && i+3<len)                            printf("for:%d\n",i+1);                           else                             isblack=0;            }            else if(iswhat(a[i])==4)            {                if(flag==0)                {                flag=1;//禁止访问                }else {                    flag=0;                }            }else{                continue;            }        }    }    return 0;}int iswhat(char sign){    if(sign>='a' && sign<='z')         return 1;//是字母      else if(sign<='9' && sign>='0')         return 2;//是数字    else if(sign=='_')         return 3;//是下划线    else if(sign=='"')         return 4;//是冒号    else         return 0;//什么都不是}

error:
error C2018: unknown character ‘0xa1’
一不小心把输入法改成了全角,全角空格是会编译出错的。

0 0
原创粉丝点击