编写一个函数findStr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定
编写一个函数findStr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6。
函数ReadWrite()实现从文件in.dat中读取两个字符串并调用函数findStr(),最后把结果输出到文件out.dat中。
注意:部分程序已经给出。
请勿改动主函数main()和其他函数中的任何内容,仅在函数findStr()的花括号中填入你编写的若干语句。
include <stdio.h>
include <string.h>
include <conio.h>
int findStr(char *str,char *substr)
{
}
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==0xla)substr[len]=0;
n=findStr(str, substr);
fprintf(wf, "%dkn", n);
i++;
}
fclose(rf);
fclose(wf);
}
int findStr(char *str,char *substr) { int n; char *p , *r; n=0; while( *str ) { p=str; r=substr; while(*r) if(*r==*p) { r++; p++; } else break; if(*r=='\O') n++; str++; } return n; } 解析:该程序属于按条件查找类型的题目,考核的知识点为:
(1)在给定的字符串中查找指定字符;
(2)统计查找后满足条件的个数。
本题的解题思路是:对原字符串中的字符进行扫描,若原字符串中含有子字符串,即原字符串的其中一部分与子字符串完全相同时,统计出个数。判断原字符串是否含有子字符串,可以将原字符串中的元素逐个与子字符串相比较,当两字符串中各个元素都相同且子字符串结束时,则证明原字符串包含一个子字符串。在统计个数的时候需要设置一个记录变量,每当原字符串包含子字符串一次的时候,该记录变量自动加1。
程序的流程是:首先通过键盘接收两个字符串,其中一个作为原字符串,另一个作为子字符串,然后调用findStr()函数对两字符串进行比较,处理后的结果由ReadWrite()函数写回文件out.dat中。
答案解析如下:
int findStr(char *str,char *substr)
{
int n;/*定义变量,n代表子符串出现次数*/
char p,r;/*定义指针变量*/
n=0;
while(str)
/*当原字符串不为空,即*str不为空时进入到外层while,此时循环中原字符串指针str和子字符串指针substr都指向其字符串内的第一个元素*/
{
p=str;/*将字符串的指针str赋给p*/
r=substr;/*将字符串的指针substr赋给r*/
while(*r)/*当子字符串也不为空时,即*r不空时进入内嵌的while循环*/
if(*r==*p)/*将原字符串与子字符串逐个元素进行比较看是否相等*/
{
r++;
p++;
}
/*将原字符串与子字符串分别后移一个字符*/
else
break;/*否则结束循环*/
if(*r=='\0')/*结束while循环的情况有两种:(1)比较完毕,即原字符串中包含该子字符串,此时子字符串的指针指向串尾(为“\0”);(2)未比较完毕,此时子字符串的指针不指向串尾。if语句的功能是通过判断子字符串的指针是否指向串尾进而来判断内层while循环结束的原因*/
n++;/*出现的次数加1*/
str++;/*牟字符串指针也指向下一个字符*/
}
return n;/*返回出现的次数*/
}
1.某一段电路上串接一个4欧姆电阻后,电路中的电流强度为原来的一半,原来电路中的电阻是欧姆.(接第 其他 2020-04-26 …
天文望远镜之后串联一个天文望远镜,能看清更深邃的宇宙?我发现:天文望远镜之后串联一个或多个天文望远 其他 2020-05-15 …
电能表坏了,为何串联一个灯泡后可以继续使用?张师傅检查电路时发现电能表烧坏了,可他却串联一个灯泡后 物理 2020-05-20 …
串联电路中只连接一个滑动变阻器和一个灯泡,电压是多少?给一个一般的1号电池电源,有电源电压.中间只 物理 2020-06-04 …
“一串串一簇簇”是什么一类词语?可以怎么归类呢?如什么象声词:唧唧歪歪.上面”一串串一簇簇一朵朵” 语文 2020-07-01 …
哪位大师帮我改下作文!特别是结尾!十月桂花香快到十月了,又该是桂花盛开的季节了,那缀满枝头的串串风 语文 2020-07-16 …
LeeIsme:预备~“把你的氢,我的碳,串一串!串一个异丁烷,串一个,原子团!把所有期,待双键, 化学 2020-07-20 …
电容串联一个电阻或者电感串联一个电阻为什么电压电流相位差不足90度?...电容串联一个电阻或者电感 物理 2020-07-30 …
有一串由13个铜环组成的链子,其中每个铜环重一克,且可以从链子上取下来,如果只取下一个铜环,就能在天 数学 2020-11-03 …
初二物理题给填一填一、是非题1.马路上的路灯看上去是排成一串串的,所以它们的连接方法是串联。()2. 其他 2021-01-13 …