仅供课外学习使用,任何个人与机构不得利用此文章进行任何形式的作弊。
实验目的:
- 具备熟练使用指针进行参数传递的能力;
- 能够对字符串进行一些基本操作;
- 锻炼字符串数组的组织和处理能力。
实验内容:
定义函数 void mystrcat(char *s1,char *s2,char *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;
}