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

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

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

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

#include<stdio.h>
#include<string.h>

#define N 300
int 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’
一不小心把输入法改成了全角,全角空格是会编译出错的。

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-28 13:48
hory权:校招vip纯神人了,还说自己是什么师范大学的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务