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