永发信息网

三级数据库编程的一个问题

答案:2  悬赏:0  手机版
解决时间 2021-05-06 22:08

题目如下:
请编写一个函数findStr(),其功能是:统计一个长度为2的子字符串在另一个字符串中出现的次数。例如:如果输入的字符串为“abkl dwafhjj dafaf safs fs4ddafadkl”,子字符串为“af”,函数的返回值应为5。
整个试题如下(包括答案):
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <conio.h>
  4. int findStr(char *str, char *substr)  
  5. {
  6.     int  n;
  7.     char  *p, *r;
  8.     n = 0;
  9.     while (*str)  
  10.     {
  11.         p = str;
  12.         r = substr;
  13.         while (*r)
  14.             if (*r == *p)
  15.             {
  16.                 r++;
  17.                 p++;
  18.             }
  19.             else
  20.             {
  21.                 break;
  22.             }
  23.         if (*r == '\0')
  24.             n++;
  25.         str++;
  26.     }
  27.     return n;
  28. }
  29. void ReadWrite()
  30. {
  31.     char  str[81], substr[10], ch;
  32.     int  n, len, i = 0;
  33.     FILE  *rf, *wf;
  34.     rf = fopen("in.dat", "r");
  35.     wf = fopen("out.dat", "w");
  36.     while (i < 25)
  37.     {
  38.         fgets(str, 81, rf);
  39.         fgets(substr, 10, rf);
  40.         len = strlen(substr) - 1;
  41.         ch = substr[len];
  42.         if (ch=='\n' || ch==0x1a)
  43.             substr[len] = 0;
  44.         n = findStr(str, substr);
  45.         fprintf(wf, "%d\n", n);
  46.         i++;
  47.     }
  48.     fclose(rf);
  49.     fclose(wf);
  50. }
  51. main()
  52. {
  53.     char str[81], substr[10];
  54.     int n;
  55.     printf("输入原字符串:");
  56.     gets(str);
  57.     printf("输入子字符串:");
  58.     gets(substr);
  59.     puts(str);
  60.     puts(substr);
  61.     n = findStr(str, substr);
  62.     printf("n=%d\n", n);
  63.     ReadWrite();
  64. }

 

 

我想问的是23行   if (*r == '\0')是什么意思?答案说的是表明子字符串在主串出现了一次,可我怎么也看不明白,请问到底是什么意思?原理.............

最佳答案

while (*r)  当r没到尾时


    if (*r == *p)  如果  r字符与p字符相等
    {
    r++;   两者都相加
    p++;
    }
    else
    {
    break;  否则退出
    }


    if (*r == '\0')   所以,如果到尾部,就是两者一直相等.
    n++;


另外,你的算法很标准,但对这题来说,太小题大作了.


给你写个简单的,当然只是针对这题的.


int i,n;


n=strlen(str);


for(i=0;i<n-1;i++)


  if(str[i]==substr[0]&&str[i+1]==substr[1])n++;


return n;


全部回答
pascal语言可以吗
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
设置开机为欢迎登录界面不生效,怎么办?
迅雷怎么设置下完一个接着自动另一下啊
3.13盗贼怎么赚钱除了双采打材料跟金团
阿里旺旺,淘宝,支付宝,都要填真实信息吗?
第四章前奏战斗怎么了
怎样把网吧里面的网络地址修改成别的地方的地
3D max7模型哪里下载,急!
赛尔号上我为什么看不见精灵
山东女子学院长清校区-图书馆在什么地方啊,
火星探测 系统
油性皮肤适合用什么牌子的护肤品,皮肤角质层
爱心车位怎么停~!经验怎么算
女生怎样使自己的头发变得有光泽。
诺基亚6500s,刚刷过机,上网怎么变卡啦!
新赛季麦迪的球衣号码是几号?
推荐资讯
关于CF7.6版,
本科毕设指导教师评语,公务员政审表中公安局
我的电脑打不开ShadowEditor Ver0.08是缺少什
点亮邮箱
大话2 80环,怎么领不了?
问个外国电影名字,一个小孩的父亲是科学家,
本人极度郁闷怎么办?
QQ宠物用电话得元包怎么冲,发信息不行,没开通
3g手机的本质是什么?
大槐树正宗刀削面围场河东店这个地址在什么地
泰安米铎碳能源科技有限公司怎么去啊,有知道
常年吃药,身体弱,想变强壮一些,如何饮食?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?