频道栏目
首页 > 资讯 > 网络技术 > 正文

计算机等级考试三级网络技术上机题(1)

14-12-17        来源:[db:作者]  
收藏   我要投稿
编写一个函数findStr( ),该函数统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6。
  函数ReadWrite( )的功能是实现从文件in68.dat中读取两个字符串,并调用函数findStr(),最后把结果输出到文件out68.dat中。
  注意:部分源程序已给出。
  请勿改动主函数main() 和其他函数中的任何内容,仅在函数 findStr()的花括号中填入你所编写的若干语句。
  试题程序:
  #include
  #include
  #include
  void ReadWrite();
  int findStr(char *str,char *substr)
  {
  }
  void main()
  {
  char str[81],substr[3];
  int n;
  system("CLS");
  printf("输入原字符串:");
  gets(str);
  printf("输入子字符串:");
  gets(substr);
  puts(str);
  puts(substr);
  n=findStr(str,substr);
  printf("n=%dn",n);
  ReadWrite();
  }
  void ReadWrite()
  {
  char ch,str[81],substr[3];
  int n,len,i=0;
  FILE *rf,*wf;
  rf=fopen("in68.dat","r");
  wf=fopen("out68.dat","w");
  while(i<>
  {
  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,"%dn",n);
  i++;
  }
  fclose(rf);
  fclose(wf);
  }【答案】
  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=='') /*如果子字符串在字符串中出现了一次*/
  n++; /*则n加1,进行统计*/
  str++; /*指向字符串中的下一个字符*/
  }
  return n; /*返回统计结果n*/
  }
  【解析】本题主要考查了指针的相关操作。
  首先,通过外层的while循环取字符串的每一个字符,取完字符串的所有字符之后,循环才会终止。用两个字符型指针分别指向两个字符串。逐个将字符串的字符跟子字符串的字符对比,如果相等,则两个指针都自加1,分别指向两个串的下一个字符。若不相等,则主串的指针加1,子串的指针重新指向起始位置,继续比较下一个字符。
相关TAG标签
上一篇:Swift实现UIKit Dynamic动画
下一篇:计算机等级考试三级网络技术上机题(3)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站