C语言编程:输入一个以回车结束的字符串a(少于80个字符),再输入一个字符串b,统计并输出b在a中出现的
编程:输入一个以回车结束的字符串a(少于80个字符),再输入一个字符串b,统计并输出b在a中出现的次数,然后再输出这两个字符串。...
编程:输入一个以回车结束的字符串a(少于80个字符),再输入一个字符串b,统计并输出b在a中出现的次数,然后再输出这两个字符串。
展开
3个回答
展开全部
以下是我给你编的程序,我试了,可以运行的,结果是对的,但是可能输出的格式不符合你的要求,你告诉我,我再改,我已经加了注释了,看不懂的就问我。希望能帮到你。
#include"stdio.h"
int input1(char a[]) //a数组的输入,返回的是a数组的长度
{
int i;
char p='a'; //初始化p,使p能够参加下面的循环
for(i=0;p!='\n';i++) //只要不输入回车,就总是进行下面的存入字母的操作。
{
scanf("%c",&p);
if(p!='\n') //如果没有输入回车,那么就将字母存入数组。
a[i]=p;
else //如果输入了回车,就存入"\0"。
a[i]=0;
}
return i-1; //i-1即为数组长度。
}
int input2(char a[],int len) //len为a数组的长度,返回的是数组b的长度
{
int i;
char p='a';
for(i=0;p!='\n';i++)
{
scanf("%c",&p);
if(p!='\n')
a[i]=p;
else
a[i]=0;
} //以上和input1相同。
if(len<i-1) //如果数组b的长度更大的话,就不可能出现符合要求的字符串了,就返回0作为b数组的长度。
return 0;
else
return i-1; //返回i-1,因为它是b数组的长度
}
int work(char a[],char b[],int len1,int len2) //len1,len2分别为数组a,b的长度
{
int n=0,i=0,j=0,temp=0; //temp随时要和i保持一致的。
while(i+len2<=len1) //只要在a中,a[i]后面还有b数组长度那么长的字符串,就进行一以下判断。
{
if(a[i]!=b[0]) //一个一个在a中找,只要和b的第一个字符不一样,就什么什么也不执行,等待循环里的i++
;
else
while(temp<i+len2) //如果找到和b[0]相同的,就从这个元素开始,将a中len2个字符,一一和b中的比较。
{
if(a[temp]==b[j]) //如果相等,就比较下一对元素。
{
j++;
temp++;
if(temp==i+len2-1) //如果比到了最后一个,说明a中有和b中一样的字符串,那么n加1
n++;
}
else if(temp!=b[j])
break;
}
i++; //找下一个a中的元素,来等待下一个循环。
temp=i; //temp随时要和i一致的
j=0; //每换一个a中的元素的话,如果和b[0]相等的话,b中的序列要从头比起
}
return n;
}
void main()
{
int len1,len2,num; //len1为a中长度,len2为b中字符串长度,num为a中有几个b中字符串。
char a[81],b[81]; //分别存入两个字符串
len1=input1(a); //编写的一个子函数,用于输入a[81],返回的是字符串长度
len2=input2(b,len1); //编写的一个子函数,用于输入a[81]
num=work(a,b,len1,len2); //计算一下所求的个数
printf("%d\n",num);
printf("%s\n",a);
printf("%s\n",b);
}
#include"stdio.h"
int input1(char a[]) //a数组的输入,返回的是a数组的长度
{
int i;
char p='a'; //初始化p,使p能够参加下面的循环
for(i=0;p!='\n';i++) //只要不输入回车,就总是进行下面的存入字母的操作。
{
scanf("%c",&p);
if(p!='\n') //如果没有输入回车,那么就将字母存入数组。
a[i]=p;
else //如果输入了回车,就存入"\0"。
a[i]=0;
}
return i-1; //i-1即为数组长度。
}
int input2(char a[],int len) //len为a数组的长度,返回的是数组b的长度
{
int i;
char p='a';
for(i=0;p!='\n';i++)
{
scanf("%c",&p);
if(p!='\n')
a[i]=p;
else
a[i]=0;
} //以上和input1相同。
if(len<i-1) //如果数组b的长度更大的话,就不可能出现符合要求的字符串了,就返回0作为b数组的长度。
return 0;
else
return i-1; //返回i-1,因为它是b数组的长度
}
int work(char a[],char b[],int len1,int len2) //len1,len2分别为数组a,b的长度
{
int n=0,i=0,j=0,temp=0; //temp随时要和i保持一致的。
while(i+len2<=len1) //只要在a中,a[i]后面还有b数组长度那么长的字符串,就进行一以下判断。
{
if(a[i]!=b[0]) //一个一个在a中找,只要和b的第一个字符不一样,就什么什么也不执行,等待循环里的i++
;
else
while(temp<i+len2) //如果找到和b[0]相同的,就从这个元素开始,将a中len2个字符,一一和b中的比较。
{
if(a[temp]==b[j]) //如果相等,就比较下一对元素。
{
j++;
temp++;
if(temp==i+len2-1) //如果比到了最后一个,说明a中有和b中一样的字符串,那么n加1
n++;
}
else if(temp!=b[j])
break;
}
i++; //找下一个a中的元素,来等待下一个循环。
temp=i; //temp随时要和i一致的
j=0; //每换一个a中的元素的话,如果和b[0]相等的话,b中的序列要从头比起
}
return n;
}
void main()
{
int len1,len2,num; //len1为a中长度,len2为b中字符串长度,num为a中有几个b中字符串。
char a[81],b[81]; //分别存入两个字符串
len1=input1(a); //编写的一个子函数,用于输入a[81],返回的是字符串长度
len2=input2(b,len1); //编写的一个子函数,用于输入a[81]
num=work(a,b,len1,len2); //计算一下所求的个数
printf("%d\n",num);
printf("%s\n",a);
printf("%s\n",b);
}
展开全部
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
int main(void){
char a[81],b[81],k,*p,lb;
printf("Please enter a string...\n");
fgets(a,80,stdin);
printf("To enter a search string...\n");
while(fgets(b,80,stdin))//保证b不为空,否则会引发错误
if(b[(lb=strlen(b)-1)]='\0',*b=='\0')
continue;
else break;
k=0,p=a;
while(p)
if(p=strstr(p,b))
k++,p+=lb;
printf("There is(are) %d \'%s\' in the strings\n",k,b);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
利用库函数,strstr,或者自己实现,因为长度较短,所以普通的算法就可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询