1、计算机三级数据库技术-88 及答案解析(总分:100.00,做题时间:90 分钟)1.编写函数 findStr(),用来统计一个长度为 2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为“asd asasdfg asd as zx67 asd mklo”,子字符串为“as”,则函数返回值为 6。 函数 ReadWrite()的功能是从文件 IN.DAT中读取两个字符串,并调用函数 findStr(),最后把结果输出到文件 OUT.DAT中。 请勿改动主函数 main()和其他函数中的任何内容,仅在函数 findStr()的函数体中填入你所编写的语句。 试题程序 #includest
2、dio.h #includestring.h #includestdlib.h void ReadWrite(); int findStr(char*str, char*substr) void main() char str81, substr3; int n; system(“CLS“); printf(“输入原字符串: “); gets(str); printf(“输入子字符串:“); gets(substr); puts(str); puts(substr); n=findStr(str, substr); printf(“n=%dn“, n); ReadWrite(); void R
3、eadWrite() char ch, str81, substr3; int n, len, i=0; FILE*rf, *wf; rf=fopen(“IN.DAT“, “r“); wf=fopen(“OUT.DAT“, “w“); while(i5) fgets(str, 80, rf); fgets(substr, 10, rf); len=strlen(substr)-1; ch=substrlen; if(ch=“n“|ch=0x1a) substrlen=0; n=findStr(str, substr); fprintf(wf, “%dn“, n); i+; fclose(rf)
4、; fclose(wf); (分数:100.00)_计算机三级数据库技术-88 答案解析(总分:100.00,做题时间:90 分钟)1.编写函数 findStr(),用来统计一个长度为 2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为“asd asasdfg asd as zx67 asd mklo”,子字符串为“as”,则函数返回值为 6。 函数 ReadWrite()的功能是从文件 IN.DAT中读取两个字符串,并调用函数 findStr(),最后把结果输出到文件 OUT.DAT中。 请勿改动主函数 main()和其他函数中的任何内容,仅在函数 findStr()的函数体中填
5、入你所编写的语句。 试题程序 #includestdio.h #includestring.h #includestdlib.h void ReadWrite(); int findStr(char*str, char*substr) void main() char str81, substr3; int n; system(“CLS“); printf(“输入原字符串: “); gets(str); printf(“输入子字符串:“); gets(substr); puts(str); puts(substr); n=findStr(str, substr); printf(“n=%dn“
6、, n); ReadWrite(); void ReadWrite() char ch, str81, substr3; int n, len, i=0; FILE*rf, *wf; rf=fopen(“IN.DAT“, “r“); wf=fopen(“OUT.DAT“, “w“); while(i5) fgets(str, 80, rf); fgets(substr, 10, rf); len=strlen(substr)-1; ch=substrlen; if(ch=“n“|ch=0x1a) substrlen=0; n=findStr(str, substr); fprintf(wf,
7、“%dn“, n); i+; fclose(rf); fclose(wf); (分数:100.00)_正确答案:()解析: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) /*如果子字符串的第一个字符等于字
8、符串中的该字符,则继续比较下一个字符*/ r+; p+; else break; /*否则退出循环*/ if(*r=“0“) /*如果子字符串在字符串中出现了一次*/ n+; /*则 n加 1,进行统计*/ str+; /*指向字符串中的下一个字符*/ return n; /*返回统计结果 n*/ 考点 本题考查对字符串的查找和统计。考查的知识点包括:指针对字符串的访问方法,C 语言循环嵌套结构。 首先通读题目,得知此题属于字符串处理问题;其次分析题干要求,本题要求实现 findStr(char*str, char*sunstr)函数,该函数需要实现在一个字符串中查找另一个字符串,并统计出现次数的功能,分析后可以归纳出实现功能的 3个关键点;关键点 1如何实现对字符串中字符的遍历;关键点 2如何实现对子字符串的查找功能;关键点 3如何统计子串其出现的次数。接着分析每一步的解决方法。对于关键点 1使用循环和指针的方式可以实现对字符串的访问;关键点 2通过嵌套的循环可以实现查找功能,具体方法是,外层循环控制对主串的遍历,内层是对子串的遍历,当主串中当前字符和子串第 1个字符相同时,继续判断其后的字符是否和子串的下一个字符相同,依次类推,则每次内层循环遍历过子串就表示找到一次;关键点 3每找到一次子串的同时,累加一个记数器,作为出现次数的统计结果。