标题:书上遇到的,不太理解,求助大神讲解
只看楼主
Aleen
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2018-7-19
结帖率:100%
已结贴  问题点数:20 回复次数:4 
书上遇到的,不太理解,求助大神讲解
程序功能:调用find函数在输入的字符串中寻找是否出现“this”这个单词,如果查到返回出现次数;如果未找到返回0。
程序代码:
#include <stdio.h>
int find(char *str)
{

 char *fstr="this";

 int i=0,j,n=0;      

 while (str[i]!='\0')

 {
     for(j=0;j<3;j++)

 if (str[j+i]!=fstr[j]) break;

 if(j==3)n++;

 i++;

 }

 return n;
}

int main(void)
{  char a[80];
   gets(a);
   printf("%d",find(a));
}

 
搜索更多相关主题的帖子: 讲解 find int char str 
2018-07-23 14:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
“求助大神讲解”
--- 讲解什么?是代码不懂,需要讲解代码的逻辑,还是结果不正确,需要指出哪里错误?

代码中的“3”是哪里来的?
若想高效,看看kmp、bm、bmh 等算法


2018-07-23 14:59
Aleen
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2018-7-19
得分:0 
。。。。

[此贴子已经被作者于2018-7-23 16:06编辑过]

2018-07-23 15:59
Aleen
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2018-7-19
得分:0 
主要是下面这段代码不懂
   for(j=0;j<3;j++)
 if (str[j+i]!=fstr[j]) break;
 if(j==3)n++;
 i++;
我也不知道3是什么,书上写的是the的长度,但我觉得可能是this的长度,所以应该是4.

[此贴子已经被作者于2018-7-23 16:02编辑过]

2018-07-23 15:59
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
得分:7 
回复 4楼 Aleen
就是根据你输入的字符串逐个和this这个单词对比,只有当4个单词都对上了才算正确,中间要是有一个对不上就跳出,接着读下一个你输入的字符进行对比。对比this,j的取值是4,不是3
2018-07-23 19:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488764-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.375522 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved