c语言用函数编程实现计算字符串中子串出现的次数。为什么子串是一位数或者出现1的时候输出不正确,求修改

#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN32767intFindString(char*... #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 32767
int FindString(char *str,char *sub);
int main()
{
int p;
char s1[N];
char s2[N];
char *str=s1;
char *sub=s2;
gets(str);
getchar();
gets(sub);
p=FindString(str,sub);
printf("%d",p);
return 0;
}

int FindString(char *str,char *sub)
{
int m,n,i,j,count=0,wow=0;
m=strlen(str);
n=strlen(sub);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(str[i+j]==sub[j])
wow++;
}
if(wow==n)
count++;
wow=0;
}
return count;
}
展开
 我来答
宠小猫的大猫
推荐于2017-12-16 · TA获得超过597个赞
知道小有建树答主
回答量:343
采纳率:90%
帮助的人:89.4万
展开全部
if(str[i+j]==sub[j]) 当i+j>=m的时候指针溢出了。修改函数如下:

int FindString(char *str,char *sub)
{
int m,n,i,j,count=0,wow=0;
m=strlen(str);
n=strlen(sub);

/*加上长度检查*/
if(m<n) return 0;

/*for(i=0;i<m;i++)*/
/*改为以下语句*/
for(i=0;i<m-n+1;i++)
{
for(j=0;j<n;j++)
{
if(str[i+j]==sub[j])
wow++;
}
if(wow==n)
count++;
wow=0;
}
return count;
}
追问
我试了,你把函数编译一下,当子串长度为1的时候就不对。。。
追答
没啥问题呀,这是等效的C++UnitTest案例(运行于vs2012)

#include "stdafx.h"
#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest2
{
TEST_CLASS(UnitTest1)
{
public:

TEST_METHOD(TestMethod1)
{
Assert::AreEqual(FindString("12345", "1"), 1);
Assert::AreEqual(FindString("12345", "8"), 0);
Assert::AreEqual(FindString("12345", "5"), 1);
Assert::AreEqual(FindString("12345", "123"), 1);
Assert::AreEqual(FindString("12345", "234"), 1);
Assert::AreEqual(FindString("12345", "345"), 1);
Assert::AreEqual(FindString("12345", "456"), 0);
Assert::AreEqual(FindString("12345", "123456"), 0);
}

int FindString(char* str, char* sub)
{
int m, n, i, j, count = 0, wow = 0;
m = strlen(str);
n = strlen(sub);

/*加上长度检查*/
if (m < n) return 0;

/*for(i=0;i<m;i++)*/
/*改为以下语句*/
for (i = 0; i < m - n + 1; i++)
{
for (j = 0; j < n; j++)
{
if (str[i + j] == sub[j])
wow++;
}
if (wow == n)
count++;
wow = 0;
}
return count;
}
};
}
newtab231
2013-05-13 · 超过13用户采纳过TA的回答
知道答主
回答量:244
采纳率:0%
帮助的人:68.5万
展开全部
char 类型怎么可以用等号if(str[i+j]==sub[j]) 来进行比较呢。应该用strcmp吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式