题目描述
将一个较短的字符串的字符交叉地插入到另一个较长的字符串中,每个字符以一定的间隔插入。该间隔=(长字符串长度/短字符串),即对两个字符串长度相除取整。例如:如果两个字符串等长(字符插入间隔=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语言请多见谅,有问题请留言