11.29~12.5作业卡死的题(当时卡)

1.编写一个程序,其中包含一个子函数,功能为统计一个字符串在另一个字符串中出现的次数。要求:

  1. 子函数形式为:int strat(char *a,char *sub);

运行结果示例:

#include<stdio.h> 
#include<stdlib.h>
#include<string.h>
int strat(char *a,char *b)
{
	int i,j,m,n,k=0;//k代表小的字符串在大的字符串出现的总次数 
	m=strlen(a);//m,n用于测量循环的次数 
	n=strlen(b);
	for(i=0;i<m-n;i++)//外循环执行m-n次(用数组平移的思路去理解) 
	{
		if(*(a+i)==*b)//从头开始访问大的数组,如果找到了第一组个两个数组中对应重合的字母 
		{
			for(j=0;j<n;j++)//接着向下判断 
			{
				if(*(a+i+j)!=*(b+j))//如果有不完全重合的部分 
				{
					break;//跳出循环 
				}
				if(j=n-1)//如果已经到达了小数组的末尾 
				{
					k++;//对于k累加 
				}
			}
		}
	}
	return k;//返回次数k 
	
}
int main()
{
	int i,j,n,k=0,t;
	char a[100],b[10];
	char *p=a,*q=b;//用指针访问数组时初始化的常见套路 
	printf("输入字符串1:"); 
	gets(p);
	printf("输入字符串2:"); 
	gets(q);
	p=a,q=b;//把两个指针向对应的数组的起始位置 
	t=strat( p, q);
	printf("n=%d",t);
	return 0;
	
}

 

2.编写一个程序,其中包含一个子函数,功能为比较两个字符串,将长的那个字符串的首地址作为子函数的返回值,然后在主函数中输出。要求:

  1. 子函数形式为:char *fun(char *s1,char *s2);

运行结果示例:

#include<stdio.h>
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
char *fun(char *s1,char *s2);
int main()
{
	char s1[100],s2[100],s3[100],t;
	char *p=s1,*q=s2;
	cout<<"输入s1字符串:";
	cin>>s1;
	cout<<"输入s2字符串:";
	cin>>s2;
	printf("较长字符串为:%s\n",fun(p,q));
	  return 0;
}
 
char *fun(char *s1,char *s2)
{
	int i,j;
	for(i=0;*(s1+i)!='\0';i++)//双重循环,访问两个数组,由于不让用strlen,用s1和s2记下两个数组各自的长度
	for(j=0;*(s2+j)!='\0';j++)	
	if(i-j<=0)//由于函数的返回值只能有一个
	 s1=s2;//如果第二个字符串长,那么把第二个字符串的地址传给第一个
	return s1;//最后统一输出第一个字符串,即二者中较长的字符串
}

 

3.编写一个程序,其中包含一个子函数,功能为将字符串s2中所有未出现在s1中的字母添加到s1的末尾,然后输出。要求:

  1. 子函数形式为:char *addat(char *s1,char *s2);即:使用指针型函数的方式定义子函数,函数返回值为字符串s1的地址。

运行结果示例:

 

#include<stdio.h>
#include<string.h>
char *addat(char *s1,char *s2)
{
	char *p;
	while(*s2)//外循环是对于s2的条件判断,如果s2没有执行到最后一个字符,那么进行如下循环
	{
		p=s1//把指针p置初值,指向数组s1;
		while(*p&&*p!=*s2)//如果p指针指向的部分不是s1的最后一个,并且p指向的字符s2里面没有,这个字符专属于s1
		p++;//那么只需要指针下跳
		if((p-s1)==strlen(s1))//如果执行了很久很久,直到p指针走完了s1
		{
			*p=*s2;//让p和当前的s2连起来
			*(p+1)='\0';//最后一个字符置为‘\0’,新的字符串组成结束
		}
		s2++;//让s2指针下跳,判断下一个字母
	}
	return s1;
}
   int main()
   {
   	char s1[100],s2[80];
   	printf("输入字符串s1:");
   	gets(s1);
   	printf("输入字符串s2:");
   	gets(s2);
   	printf("结果:%s\n",addat(s1,s2));
   	return 0;
   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值