查看匯總:2014計(jì)算機(jī)三級(jí)《數(shù)據(jù)庫(kù)》上機(jī)例題精講匯總
【考點(diǎn)分析】 本題考查對(duì)字符串的查找和統(tǒng)計(jì)?疾榈闹R(shí)點(diǎn)包括:指針對(duì)字符串的訪問(wèn)方法,C語(yǔ)言循環(huán)嵌套結(jié)構(gòu)。
【解題思路】 首先通讀題目,得知此題屬于字符串處理問(wèn)題;其次分析題干要求,本題要求實(shí)現(xiàn)findStr(char *str, char *sunstr)函數(shù),該函數(shù)需要實(shí)現(xiàn)在一個(gè)字符串中查找另一個(gè)字符串,并統(tǒng)計(jì)出現(xiàn)次數(shù)的功能,分析后可以歸納出實(shí)現(xiàn)功能的3個(gè)關(guān)鍵點(diǎn);關(guān)鍵點(diǎn)1如何實(shí)現(xiàn)對(duì)字符串中字符的遍歷;關(guān)鍵點(diǎn)2如何實(shí)現(xiàn)對(duì)子字符串的查找功能;關(guān)鍵點(diǎn)3如何統(tǒng)計(jì)子串其出現(xiàn)的次數(shù)。
接著分析每一步的解決方法。對(duì)于關(guān)鍵點(diǎn)1使用循環(huán)和指針的方式可以實(shí)現(xiàn)對(duì)字符串的訪問(wèn);關(guān)鍵點(diǎn)2通過(guò)嵌套的循環(huán)可以實(shí)現(xiàn)查找功能,具體方法是,外層循環(huán)控制對(duì)主串的遍歷,內(nèi)層是對(duì)子串的遍歷,當(dāng)主串中當(dāng)前字符和子串第1個(gè)字符相同時(shí),繼續(xù)判斷其后的字符是否和子串的下一個(gè)字符相同,依次類推,則每次內(nèi)層循環(huán)遍歷過(guò)子串就表示找到一次;關(guān)鍵點(diǎn)3每找到一次子串的同時(shí),累加一個(gè)記數(shù)器,作為出現(xiàn)次數(shù)的統(tǒng)計(jì)結(jié)果。
【參考答案】
int findStr(char *str,char *substr)
{
int n=0; /*定義計(jì)數(shù)器變量,統(tǒng)計(jì)出現(xiàn)次數(shù)*/
char *p,*r; /*定義指針變量來(lái)分別指向兩個(gè)字符串*/
while(*str) /*如果字符串沒(méi)有結(jié)束,則一直循環(huán)下去*/
{
p=str; /*指針p指向字符串首地址*/
r=substr; /*指針r指向子字符串首地址*/
while(*r) /*若子字符串沒(méi)有結(jié)束,則循環(huán)繼續(xù)*/
if(*r==*p) /*如果子字符串的第一個(gè)字符等于字符串中的該字符,則繼續(xù)比較下一個(gè)字符*/
{
r++;
p++;
}
else
break; /*否則退出循環(huán)*/
if(*r=='\0') /*如果子字符串在字符串中出現(xiàn)了一次*/
n++; /*則n加1,進(jìn)行統(tǒng)計(jì)*/
str++; /*指向字符串中的下一個(gè)字符*/
}
return n; /*返回統(tǒng)計(jì)結(jié)果n*/
}
【易錯(cuò)提示】 遍歷字符串時(shí)指針的使用;查找子串的算法使用。
相關(guān)推薦:
2014年計(jì)算機(jī)等級(jí)考試過(guò)關(guān)技巧
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |