SWUST OJ557 程序设计C 字符串交叉插入

题目描述

将一个较短的字符串的字符交叉地插入到另一个较长的字符串中,每个字符以一定的间隔插入。该间隔=(长字符串长度/短字符串),即对两个字符串长度相除取整。例如:如果两个字符串等长(字符插入间隔=1),就将后输入的串的字符每隔一个字符插入先输入的串当中;被插入的字符串长度为12,待插入的字符串的长度为5,那么字符插入间隔为2,以此类推。请参考Sample Input和Sample Output。

输入

只有一组测试数据,两个字符串(它们的长度不会超过100)。

输出

输出1行信息,即插入后的新串。

样例输入

ABCDEFG abcdefg
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghi
样例输出

AaBbCcDdEeFfGg
ABaCDbEFcGHdIJeKLfMNgOPhQRiSTUVWXYZ

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

//定义的插入函数
//核心思想就是根据对应索引值把两个数组混合插入到一个新的数组
void insert_string(char *long_str, char *short_str) { 
	char result[200];//用于存放结果的
	int long_len = strlen(long_str); //算个数 
	int short_len = strlen(short_str);  
	int interval = long_len / short_len;//算间隔 
	int i, j, n;  
	
	for (i = 0, j = 0,n = 0; i < long_len+short_len; i++) {//i 是每次都增长的
		if ((n+1)<=short_len){//用于应对当短的数组插完了,但长的数组还没插完
			if ((i+1)%(interval+1)==0){//当该插入短数组的时候
				result[i]=short_str[n];//插短数组
				n++;//短数组索引值+1
			}
			else 
			{
				result[i]=long_str[j];//插长数组的值
				j++;//长数组索引值+1
			}
		}else{
			result[i]=long_str[j];//短的数组插完了,但长的数组继续插
			j++;//长数组索引值+1
		}
	}
	result[i] = '\0'; //末尾加"\0" 用于停止%s输出
	memcpy(long_str, result, sizeof(result));//没有返回值,修改了long_str
}  

int main(){
	char str1[100], str2[100];  //定义两个数组
	scanf("%s%s", str1, str2); //输入两个数组
	int str1_len = strlen(str1);
	int str2_len = strlen(str2);
	if (str1_len>=str2_len){//比长短交换顺序
		insert_string(str1,str2);
		printf("%s",str1);
	}
	else if (str1_len <str2_len){
		insert_string(str2,str1);
		printf("%s",str2);
		
	}
	
	return 0;
}

新人,初学c语言请多见谅,有问题请留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值