请编写一个函数int fun(char *ss,char *s),该函数的功能是:求出ss字符串中指定字符串s的个数并返回此值 编写一个函数intfun(char*ss,charc),该函...

作者&投稿:剧炉 (若有异议请与网页底部的电邮联系)
#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 ) );
}

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));
}

请编写一个函数int fun(*char ss,char c),它的功能是:求出ss字符串中指定字~

#include int fun(char *ss,char c){int n=0;while(*ss>0){if(c==*ss) n++;ss++;}return n;}void main(){int a=0;a=fun("ahjgbsdfaaaddg",'a');printf("%d
",a);}运算结果如图:

#include "stdio.h"
int fun(char*ss,char c)
{int i,s=0;
for(i=0;ss[i];i++)
if(ss[i]==c)s++;
return s;
}
int main()
{char c='2',s[]="1234522627890";
printf("%s中有%d个%c
",s,fun(s,c),c);
return 0;
}