用函数编程实现计算字符串中子串出现的次数。
函数原型:
int FindString(char *str,char *sub)
要求:
在主函数中输入字符串和子串,调用FindString()函数,输出子串出现的次数。
妹子的程序:
#include
#include
int FindString(char *str,char *sub);
#define N 100
int main()
{
char a[N],b[N],i;
printf("输入字符串:");
gets(a);
printf("输入子字符串:");
gets(b);
i=FindString(a,b);
printf("重复%d次:",i);
}
int FindString(char *str,char *sub)
{
char b[N];
int n=0;//n记录重复的次数;
while(*str!='\0')
{
sub=&b[0];//如果在下面第二个while中读取一半子字符串与主字符串不相等
while(*str!=*sub)//的情况发生时 ,需要让指针指向子字符串的第一个地址接着查找;
{
str++;//不相等时str继续向后读取下标
}
while(*sub!='\0'&&*str==*sub)
{
str++;
sub++;//相等时接着验证后续字符是否相等
}
if(*sub=='\0')//读取完毕说明有相同的子字符串
{
n++;
sub=&b[0];//还原子字符串便于接下来的验证;
}
}
return n;
}
接收不了正确的结果啊?求大神帮帮忙指点一下/
我也是初学者,我认为错误在这i=FindString(a,b);
您声明的函数输入参数是指针,这里的输入却不是,
我觉得可以尝试改为i=FindString(&a,&b);
初学者,回答有问题希望您不吝指正。
// t.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
int FindString(char str,char *sub);
#define N 100
int main()
{
char a[N],b[N],i;
printf("输入字符串:");
gets(a);
printf("输入子字符串:");
gets(b);
i=FindString(a,b);
printf("重复%d次:",i);
system("pause");
}
int FindString(char *str,char *sub)
{
char b = sub;
int n=0;//n记录重复的次数;
while(*str!='\0')
{
sub=&b[0];//如果在下面第二个while中读取一半子字符串与主字符串不相等
while(*str!='\0'&&*str!=*sub)//的情况发生时 ,需要让指针指向子字符串的第一个地址接着查找;
{
str++;//不相等时str继续向后读取下标
}
while(*sub!='\0'&&*str==*sub)
{
str++;
sub++;//相等时接着验证后续字符是否相等
}
if(*sub=='\0')//读取完毕说明有相同的子字符串
{
n++;
sub=&b[0];//还原子字符串便于接下来的验证;
}
}
return n;
}
char* b = sub;
为什么* 显示不出来
还有上面的函数里面的* 复制出来也自动没有了,这两个加上去
int FindString(char *str,char *sub);
#define N 100
int main()
{
char a[N],b[N],i;
printf("输入字符串:");
gets(a);
printf("输入子字符串:");
gets(b);
i=FindString(a,b);
printf("重复%d次:",i);
}
int FindString(char *str,char *sub)
{
char *b;
int n=0;//n记录重复的次数;
while(*str!='\0')
{
b=sub;
while(*str!=*sub)//的情况发生时 ,需要让指针指向子字符串的第一个地址接着查找;
{
str++;//不相等时str继续向后读取下标
}
while(*b!='\0'&&*str==*b)
{
str++;
b++;//相等时接着验证后续字符是否相等
}
if(*b=='\0')//读取完毕说明有相同的子字符串
{
n++;
}
}
return n;
}
char b[N];
sub=&b[0];//如果在下面第二个while中读取一半子字符串与主字符串不相等
这句有问题