请编写一个函数int fun(char *ss,char *s),该函数的功能是:求出ss字符串中指定字符串s的个数并返回此值
发布网友
发布时间:2022-12-02 21:45
我来回答
共2个回答
热心网友
时间:2023-11-12 22:43
#include <string.h>
#include <stdio.h>
#define M 81
int fun( char *ss, char *s )
{
int count=0;//计数
int f=1;
for(int i=0;i<strlen(ss);i++)
if(strlen(ss)-i<strlen(s))//到最后,剩余的长度不够子串s的长度了,肯定不相同,退出循环
break;
else
{
f=1;
for(int j=i,k=0;j<i+strlen(s);j++,k++)//每次循环母串ss截取子串s的长的字符 ,与子串s比较
if(ss[j]!=s[k])//有一个不相同的
f=0;//f赋值0;
if(f==1)//f==1说明截取的字符串与子串相同
count++;//计数器加1
}
return count;
}
int main()
{
char a[M]="1231231", s[M]="12";
printf( " Please enter a string:" );
gets(a);
printf( " Please enter a substring:" );
gets(s);
printf( " The counts is: %d ", fun( a, s ) );
}追问
结果·不对
追答
自定义函数部分没有问题,几个极端数据组都测试过了;你绝对修改主函数部分了
因为你给的代码是printf( " The counts is: %d ", fun( a, s ) );
应该是输出 The counts is: (一个数);
拜托,你要修改主函数部分,也要看着改;你这个运行结果图,printf函数输出的绝对不是fun()函数的返回值;而是一个没有赋初值的变量,所以才会输出这么大个数;
你把我给你的代码全部粘贴到编译器上运行一下,看看结果;试试几组数据,错没错你就知道了;
下面是我运行全部代码,输入几组数据后的结果;看一样输出这几组数据都没问题;
热心网友
时间:2023-11-12 22:44
main最后一个printf没带\n,gets会把换行符读入字符串,gets为极不安全的函数
#include <string.h>
#include <stdio.h>
#define M 81
int fun(char *ss,char *s) {
int sslen = strlen(ss);
int slen = strlen(s);
if (sslen <= 0 || slen <= 0) {
return 0;
}
--slen;
int chr = (int)((char*)memchr(s + 1, s[0], slen - 1) - s); //s中第二次出现s[0]的地方
if ((int)((char*)NULL - s) == chr) {
chr = slen;
}
int res = 0; //返回值
for (int i = 0; i < sslen - slen + 1; i++) {
if (ss[i] == s[0]) {
if (!memcmp(ss + i + 1, s + 1, slen - 1)) {
//第一个元素已经比较过了,直接从第二个元素开始
res++;
}
i += chr;
}
}
return res;
}
int main()
{
char a[M], s[M];
printf(" Please enter a string:");
fgets(a, M, stdin);
a[strlen(a) - 1] = '\0';
printf(" Please enter a substring:");
fgets(s, M, stdin);
s[strlen(s) - 1] = '\0';
printf(" The counts is: %d\n", fun(a, s));
}