一种是使用C语言自带的strcat函数来完成,strcat(str1,str2),可以将str2指定的字符串连接到str1指定的字符串后面,结果存储在指定的字符数组中,str1指定的字符串原来最后面的‘\0’被取消。因为要把str2接在str1后面,所以应该多给str1分配一些内存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str1[128]={0};
char str2[32]={0};
scanf("%s %s",str1,str2);
printf("%s\n",strcat(str1,str2));
printf("\n");
system("pause");
return 0;
}
另一种就是自己写一个函数,让str2中的字符串接在str1上。我定义了3个字符数组str1,str2,str3,其中str3用来存储str1和str2的内容。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str3[200];//长度最好大于str1+str2的长度之和,以避免溢出
void connect(char str1[],char str2[]);
int main()
{
char str1[100];
char str2[100];
scanf("%s %s",str1,str2);
connect(str1,str2);
printf("%s",str3);
printf("\n");
system("pause");
return 0;
}
void connect(char str1[],char str2[])
{
int i=0,j=0;
while(str1[i]!='\0')
{
/*str3[j]=str1[i];
i++;
j++;*/
str3[j++]=str1[i++];
}
i=0;
while(str2[i]!='\0')
{
/*str3[j]=str2[i];
i++;
j++;*/
str3[j++]=str2[i++];
}
str3[j]='\0';
}
在写完这个代码后我发现虽然连接了两个字符串,但多定义了一个数组,是对内存的一种浪费,于是进行了优化,将str2直接接在str1上。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void connect(char str1[],char str2[])
{
int i=0,j=0;//计数
while(str1[i]!='\0')
i++;
while(str2[j]!='\0')
{
str1[i]=str2[j];
i++;
j++;
//也可以写成str1[i++]=str2[j++]
}
}
int main()
{
char str1[128]={0};
char str2[32]={0};
scanf("%s %s",str1,str2);
connect(str1,str2);
printf("%s\n",str1);
printf("\n");
system("pause");
return 0;
}
可以在这些代码里面使用strlen函数看看前后字符串长度的改变,这里我就不罗列出来了。