北航研究生复试2012上机第三题:统计关键字出现的位置
2018-02-23 18:15
337 查看
输入一行C语言代码,查找关键字if,while,for并按照出现顺序输出。输出格式:
关键字:位置
关键字:位置
还是字符串匹配的问题,为了方便,程序中本人写成从文件中读取主串,可以按照题目要求,改成控制台输入。
输入:
输出
关键字:位置
关键字:位置
还是字符串匹配的问题,为了方便,程序中本人写成从文件中读取主串,可以按照题目要求,改成控制台输入。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 100 const char* fileName = "buaa123.in"; const char* keyword1 = "if"; const char* keyword2 = "while"; const char* keyword3 = "for"; typedef struct KeyWord{ //关键字节点 包括索引index和关键字字符串keyword[] int index; char keyword[6]; }; char* ReadFile(const char* fileName, int &len); //从文件中读取主串 void BF(char* mstr,const char* sstr, KeyWord* arr, int &size); //字符串匹配 bool Judge(char a, char b); //判断是关键字还是变量 void Sort(KeyWord* arr, int size); //关键字节点排序 int main(){ int len = 0; char* str = ReadFile(fileName, len);//从文件中读取主串 KeyWord arr[MAXSIZE]; int size = 0; BF(str,keyword1,arr,size); //匹配关键字1 BF(str,keyword2,arr,size); //匹配关键字2 BF(str,keyword3,arr,size); //匹配关键字3 Sort(arr,size); //排序 for(int i = 0; i < size; i++){ //输出 printf("%s:%d\n",arr[i].keyword,arr[i].index); } return 0; } char* ReadFile(const char* fileName, int &len){ FILE* fp; fp = fopen(fileName,"r"); if(fp == NULL){ printf("文件%s不能读入\n", fileName); exit(1); } int ch; while((ch = fgetc(fp)) != EOF){ //len记录文件大小 len++; } rewind(fp); char* str = (char* )malloc(sizeof(char) * len + 1); str[len] = '\0'; int i = 0; while((ch = fgetc(fp)) != EOF){ str[i++] = ch; } fclose(fp); return str; } void BF(char* mstr,const char* sstr, KeyWord* arr, int &size){ int len1 = strlen(mstr); int len2 = strlen(sstr); int i,j; j = 0; for(i = 0; i < len1; ){ if(mstr[i] != sstr[j]){ //不匹配 i = i - j + 1; j = 0; }else{ //匹配 i++; j++; } if(j >= len2){ if(Judge(mstr[i - j - 1],mstr[i])){ //是关键字 arr[size].index = i - len2 + 1; strcpy(arr[size].keyword,sstr); arr[size].keyword[len2] = '\0'; ++size; } j = 0; } } } bool Judge(char a, char b){ if(a == ';' && b == '(') return true; if(a == ' ' && b == '(') return true; if(a == '{' && b == '(') return true; if(a == '}' && b == '(') return true; return false; } void Sort(KeyWord* arr, int size){ //冒泡排序 KeyWord temp; int i,j; for(i = 0; i <size; i++){ for(j = i+1; j < size; j++){ if(arr[j].index < arr[i].index){ temp.index = arr[i].index; strcpy(temp.keyword,arr[i].keyword); arr[i].index = arr[j].index; strcpy(arr[i].keyword,arr[j].keyword); arr[j].index = temp.index; strcpy(arr[j].keyword,temp.keyword); } } } }
输入:
#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';}return0;}
输出
相关文章推荐
- 北航研究生复试2015上机第三题:记录单词并按字典顺序输出
- 北航研究生复试2008上机第三题:字符串匹配
- 北航研究生复试2010上机第三题:数组是否相同
- 北航研究生复试2011上机第三题:显示省略
- 北航研究生复试2014上机第三题:冒号对齐
- 北航研究生复试2009上机第三题:字符串查找删除
- 北航研究生复试2013上机第三题:科学计数表示法
- 北航上机复试2012-第一题-第二题-第三题
- 九度OJ1486 /POJ 1029/2012北京大学研究生复试上机
- 浙大计算机研究生复试上机考试-2006年_Prim_hdoj1233
- 水仙花数(2013中南大学研究生上机复试题)
- hdu 4416 水题 浙大计算机研究生复试上机考试-2005年 可是发现自己写代码有问题
- 算法之美——浙大计算机研究生复试上机考试-2009年
- 浙大研究生复试上机考试2005——畅通工程
- hdu1233浙大计算机研究生复试上机考试(2006)还是畅通工程
- 畅通工程(2007浙江大学研究生复试上机题[最小生成树||并查集])
- HDU1877 又一版A+B 浙大计算机研究生复试上机考试-2008年
- 北航2007年计算机复试上机
- Python Challenge:第三关:统计超长字符串中最少出现的字符
- 浙大计算机研究生复试上机考试-2006年---《简单计算器》---栈的运用