2006年9月全國(guó)等級(jí)考試三級(jí)c語(yǔ)言上機(jī)題庫(kù)(十九)
題目19(無(wú)憂id 144 單詞個(gè)數(shù)統(tǒng)計(jì)題) 編寫(xiě)一個(gè)函數(shù)findstr(char *str,char *substr),該函數(shù)統(tǒng)計(jì)一個(gè)長(zhǎng)度為2的子字符串在另一個(gè)字符串中出現(xiàn)的次數(shù)。例如,假定輸入的字符串為"asd asasdfg asd as zx67 asd mklo",子字符串為"as",函數(shù)返回值是6。函數(shù)readwrite()實(shí)現(xiàn)從文件in.dat中讀取兩個(gè)字符串,并調(diào)用函數(shù)findstr(),最后把結(jié)果輸出到文件out.dat中。注意:部分源程序存在文件prog1.c中。請(qǐng)勿改動(dòng)主函數(shù)main()和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)findstr()的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。#include <stdio.h>#include <string.h>#include <conio.h> int findstr(char *str,char *substr){ int n=0;char *p , *r;while ( *str ){p=str;r=substr;while(*r)if(*r==*p) { r++; p++; }else break;if(*r=='\0')n++;str++; }return n;} main(){char str[81], substr[3] ;int n ; clrscr() ;printf("輸入原字符串:") ;gets(str) ;printf("輸入子字符串:") ;gets(substr) ;puts(str) ;puts(substr) ;n=findstr(str, substr) ;printf("n=%d\n", n) ;readwrite() ;} readwrite(){char str[81], substr[3], ch;int n, len, i = 0;file *rf, *wf ; rf = fopen("in.dat", "r") ;wf = fopen("out.dat", "w") ;while(i < 25) {fgets(str, 80, rf) ;fgets(substr, 10, rf) ;len = strlen(substr) - 1 ;ch = substr[len] ;if(ch == '\n' || ch == 0x1a) substr[len] = 0 ;n=findstr(str, substr);fprintf(wf, "%d\n", n) ;i++ ;}fclose(rf) ;fclose(wf) ;} 解法二:int findstr(char *str,char *substr){ int i,j,len1,len2,cnt=0,flag;len1=strlen(str);len2=strlen(substr);for(i=0;i<len1;i++){ for(j=0;j<len2;j++)if(str[i+j]==substr[j]) flag=1;else {flag=0;break;}if(flag==1) cnt++;}return cnt;}解法三:int findstr(char *str,char *substr){ int i,cnt=0;for(i=0;i<strlen(str);i++) if(str[i]==*substr&&str[i+1]==*(substr+1)) cnt++; return cnt;}解法四:int findstr(char *str,char *substr){int cnt=0;while(*str)if(*str==*substr&&*(str+1)==*(substr+1)) { cnt++; str++;}else str++;return cnt;}