首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
编写一个函数findStr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6。 函数ReadWrite()
编写一个函数findStr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6。 函数ReadWrite()
admin
2010-01-11
100
问题
编写一个函数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; /*返回出现的次数*/
}
转载请注明原文地址:https://kaotiyun.com/show/Xb5Z777K
本试题收录于:
三级信息管理技术题库NCRE全国计算机三级分类
0
三级信息管理技术
NCRE全国计算机三级
相关试题推荐
下列哪一种方法不能用于提高文件目录检索效率?()
系统中有2个并发进程,当一个进程在等待另一个进程向它发送消息时,它们之间的关系是()。
进程访问临界区时要遵循相关准则,下列哪一项是错误的准则?()
IP协议规定的内容不包括()。
虚拟页式存储系统中进行页面置换时,把最先装入内存的一页调出的策略是()。
设系统中有3种类型的资源(A,B,C)和5个进程(P1,P2,P3,P4,P5),A资源的数量是17,B资源的数量是6,C资源的数量为19。在阳时刻系统的状态如下表:系统采用银行家算法实施死锁避免策略,若当前系统剩余资源(A,B,C)分别为(2
关于客户机/服务器模型的描述中,正确的是()。
系统允许部分进程发生死锁,通过定时运行资源分析程序并报告是否已有死锁的方法称为()。
UNIX操作系统中,fork()系统调用用于创建进程。仔细阅读、分析下列程序,假设程序正确运行并创建子进程成功,那么输出到屏幕的正确结果是()。main(){pid_tpid;pid=fork();if(
软件工程学包含软件开发技术和软件工程管理两部分,下列选项()是与工程管理中有关的研究内容。
随机试题
A、Itisunacceptedbysomanystudents.B、Itistakendirectlyfromstudents’salary.C、Itbecomeslowwhentheloanisreceived
热拆法拆卸滚动轴承就是先用顶拔器卡爪钩住轴承内圈,并给轴承施加一定拉力,然后迅速将加热到()左右的热油浇注在轴承圈上,待轴承套圈受热膨胀后,即可用顶拔器将轴承拉出。
焊缝及熔敷金属拉伸试样,按其夹持部分的形状分为()。
____________,此恨绵绵无绝期。《长恨歌》
2002年3月25日~4月1日,我国研制的飞船成功发射并准确降落,我国载人航天工程第次飞行试验获得圆满成功()
用反相高效色谱法测定盐酸肾上腺素注射液的含量,所采用的流动相系统是
甲涉嫌黑社会性质组织犯罪,10月5日上午10时被刑事拘留。下列哪一处置是违法的?(2012年卷二29题)
下列提法中,错误的是( )。
许先生打算10年后积累15.2万元用于子女教育,下列哪个组合在投资报酬率为5%的情况下无法实现这个目标?()
根据下面资料,回答101~105题2007年全国粮食种植面积10533万公顷,比上半年增加70万公顷;棉花种植面积559公顷,增加7公顷;油料种植面积1094万公顷,减少60万公顷;糖料种植面积167万公顷,增加10万公顷。全国2007年粮
最新回复
(
0
)