1. 程式人生 > >北航研究生複試2012上機第三題:統計關鍵字出現的位置

北航研究生複試2012上機第三題:統計關鍵字出現的位置

輸入一行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;}

輸出
這裡寫圖片描述

相關推薦

北航研究生複試2012上機統計關鍵字出現位置

輸入一行C語言程式碼,查詢關鍵字if,while,for並按照出現順序輸出。輸出格式: 關鍵字:位置 關鍵字:位置 還是字串匹配的問題,為了方便,程式中本人寫成從檔案中讀取主串,可以按照題目要求,改成控制檯輸入。 #include<stdio.

最接近的數之和

題目描述 給定一個包括 n 個整數的陣列 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。 例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.

2014 藍橋杯 預賽 c/c++ 本科B組 李白打酒 (8' )

第三題:李白打酒 (8' )     話說大詩人李白,一生好飲。幸好他從不開車。     一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱:     無事街上走,提壺去打酒。     逢店加一

一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?

第三題:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? 設這個整數是X,根據題目:x+100=n*n,x+100+168=n*n+168=m*m 方法一:簡

華為校招字串變換最小費用(動態規劃DP問題)

題目: 給出兩個字串A,B。將A字串轉化為B字串,轉化一共有兩種方式:刪除連續的n個字元,一次操作費用為2。增加連續的n個字元(增加的字元是什麼由你決定),一次操作費用為n+2。求把A變為B最小費用。 輸入: 第一行輸入一個正整數T(1 <= T &

海淀區區賽2018有限域

試題描述 在抽象代數中,有一個關於有限域的定理:存在一個大小為q的有限域當且僅當q是某個素數p的方冪,即q=p^k,k>=1,且在同構意義下,相同大小的有限域只有一個。 你決定運用這個定理寫一個程式來計算同構意義下的不同有限域個數。對於一個給定的輸入n,你需要計算有

Python每日一3統計一個檔案中每個單詞出現的次數

題目: 統計一個檔案中每個單詞出現的次數,列出出現頻率最多的5個單詞。 前言: 這道題在實際應用場景中使用比較廣泛,比如統計歷年來四六級考試中出現的高頻詞彙,記得李笑來就利用他的程式設計技能出版過一本背單詞的暢銷書,就是根據詞頻來記單詞,深受學生喜歡。這就是一個把程式設計技能用來解決實際問

劍指offer程式設計(JAVA實現)——28陣列中出現次數超過一半的數字

github https://github.com/JasonZhangCauc/JZOffer import java.util.Arrays; /** * * 劍指offer程式設計題(JA

全排列(洛谷1061 Jam的計數法or NOIP 2006 普及組

div 順序 pre highlight 格式 其中 字符 是個 true Jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文字母計數,他覺得這樣做,會使世界更加豐富多彩。 在他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文字母按

dp+高精度(洛谷1005 矩陣取數遊戲NOIP 2007 提高

結束 efi -m ron highlight std mes c++ brush 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下: 1.每次取數時須從每行各取走一個元素,共n個。m次後取完矩陣所有元素;

dfs(洛谷1019 單詞接龍NOIp2000提高組

單詞 turn space != tac std 例如 關系 一行 單詞接龍是一個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定一個開頭的字母,要求出以這個字母開頭的最長的“龍”(每個單詞都最多在“龍”中出現

[2012山東省屆ACM大學生程序設計競賽]——Mine Number

== memory cat chan get iostream sts 設計 target Mine Number 題目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&proble

2014百度之星資格賽

字符串 struct uri hit other printf 能夠 ava 單獨 Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others

loj6102 「2017 山東二輪集訓 Day1」

scanf .com color gif cnblogs tar none urn algo 傳送門:https://loj.ac/problem/6102 【題解】 貼一份zyz在知乎的回答吧 https://www.zhihu.com/question/6121888

bzoj 4929:

logs include clas out std ret ble opera ons Description 給定n,b,c,d,e以及A0,A1,···,An−1,定義 xk=b×c^4k+d&t

名校聯賽DAY.2A層book(書)題解

但是 con 二本 nbsp amp out 輸出 期望值 through 書 時間限制: 1 Sec 內存限制: 512 MB 題目描述 書 book.in/.out Hazel有n本書,編號1為n到 ,疊成一堆。當她每次抽出一本書的時候,上方的書會因重力而下落,

9.27考試 SD_le NOIP模擬 建造遊樂場題解

closed sin es2017 com 需要 style pla math spl   這道題當時沒讀完題時腦部了無數種問法,然而最後還是猝不及防。一開始還以為是結論題,然而死也退不出來,就先去打第二題了。然後在想這道題時,我想到的是這樣的思路(由於當時時間緊迫,

擺花(NOIP2012 普及組

數據規模 .cn ostream .com col tdi int png namespace 問題描述   小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第i

海港(NOIP2016 普及組

thml 其中 統計 滿足 noip 記錄 數量 所有 遞增 描述 小K是一個海港的海關工作人員,每天都有許多船只到達海港,船上通常有很多來自不同國家的乘客。 小K對這些到達海港的船只非常感興趣,他按照時間記錄下了到達海港的每一艘船只情況;對於第i艘到達的船,他記錄了這艘船