BJFU|C程序设计基础(21下)实验四

仅供课外学习使用,任何个人与机构不得利用此文章进行任何形式的作弊。

实验目的:

  1. 具备熟练使用指针进行参数传递的能力;
  2. 能够对字符串进行一些基本操作;
  3. 锻炼字符串数组的组织和处理能力。

实验内容:

定义函数 void  mystrcat(char *s1,char *s2char *new_s) 实现对两个字符串进行交叉连接。

例如:有两个字符串“abcd”、“1234”,交叉连接后结果为“a4b3c2d1”。

实验要求:

1.须独立完成算法设计及代码编写,严禁抄袭。

参考书目:

Stephen Prata著, 姜佑 译. C Primer Plus (第6版)中文版. 北京:人民邮电出版社,2016.

代码实现:

实例一:每天都想睡十小时:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <windows.h>
 
void mystrcat(char *s1, char *s2, char *new_s)
{
	int i, b, t;
	b = strlen(s2);
	for(i = 0; i < b / 2; i++)
	{
		t = *(s2 + i);
		*(s2 + i) = *(s2 + b - i - 1);
		*(s2 + b - i - 1) = t;
	}//调换s2中非空字符顺序 
	for(i = 0; i < 18; i++)
	{
		if(i % 2 == 0)
		{
			new_s[i] = *s1;
			s1++;
		}
		else
		{
			new_s[i] = *s2;
			s2++;
		}
	}//交叉连接 
	for(i = 0; i < 18; i++)//<18防越界 
		if(*(new_s + i) != 0)
printf("%c", *(new_s + i));//输出 
}

int main()
{
	int i;
	char s1[10] = {'\0'}, s2[10] = {'\0'}, s3[20] = {'\0'};
	//Key Step:提前初始化可以免去后续追加'\0' 
	gets(s1); gets(s2);//输入 
	if(strlen(s1)>9 || strlen(s2) >9)
	{
		printf("cin again:\n");
		for(i = 0; i < 10; i++)
		{
			s1[i] = '\0'; s2[i] = '\0';
		}
		gets(s1); gets(s2);
	}//防止越界 
	char *p1 = s1, *p2 = s2, *p3 = s3;
	mystrcat(p1, p2, p3);
	return 0;
}

实例二:>C=C<:

#include <stdio.h>
#include <string.h>
#define num 1000

int k =0;
char a[num],b[num],s[num];
char *s1,*s2,*p;
void mystrcat(char *s1,char *s2,char *p);

int main()
{
	gets(a);
	gets(b);
	int m = strlen(a);
	s1 = &a[0];
	s2 = &b[m-1];
	int i;
	for(i=0;i<m;i++)
	{
		p = &s[2*i];
		mystrcat(s1,s2,p);
		s1++;
		s2--;
	}
	return 0;
} 
 
void mystrcat(char *s1,char *s2,char *p)
{
	k++;
	p = s1;
	printf("%c",*p);
	p = &s[k];
	p = s2;
	printf("%c",*p);	
}

实例三:young111xin:

#include<stdio.h>
#include<string.h>

void mystrcat (char *s1, char *s2, char *new_s)
{

	int len1=strlen(s1),len2=strlen(s2), i;
		
	if (len1 > len2 || len1 == len2)
	{
		for (i = 0; i < len2; i++)
		{ 
			new_s[2 * i] = s1[i];
			new_s[2 * i + 1] = s2[len2 - i - 1];
		} 
		for (; i < len1; i++)
		{
			new_s[len2 + i] = s1[i];
		}

	}
	
	if (len1 < len2)
	{
		for (i = 0; i < len1; i++)
		{ 
			new_s[2 * i] = s1[i];
			new_s[2 * i + 1] = s2[len2 - i - 1];
		} 
		for (; i < len2; i++)
		{
			new_s[len1 + i] = s2[len2 - i - 1];
		}
	}
	
	new_s[len1 + len2]= '\0'; 
}
	
int main()
{
	char a[105], b[105], c[220];
	
	scanf("%s",a);
	scanf("%s",b);
	mystrcat(a, b, c); 
	printf("%s",c);
	
	return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CresCent_Charles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值