题目名称
合并字符串
题目描述
合并两个字符串,每个字符串长度不小于1不超过50,
主函数已经给出,在join.h头文件中完成join函数,函数原型如下:
char* join(char* a, int alength, char* b, int blength)
需要在join函数中动态申请内存,长度为a和b长度之和加1(因为字符串结尾有‘ ’); 函数返回值即所动态申请内存的首地址。
输入:两个字符串,每个一行
输出:合并后的字符串及所申请内存的实际大小,字符串一行,实际大小一行
Sample:
input:
1234
567890
output:
1234567890
24
HINT
使用malloc函数进行动态内存申请,申请到的实际内存大小与操作系统相关,大部分情况下不等于所申请的具体数值。
理解
这一题主要让我们熟悉目前的动态分配函数的相关内容,malloc返回值为分配到内存空间的首地址,所以必须要用地址类型来存储返回值,接着赋值的话,可以多种方法了,可以傻傻地一个一个的赋值也可以利用处理字符串的函数strcpy还有标答中给到的mencpy。
我的代码
1 //“join.h” 2 char* join(char* a, int al, char* b, int bl) { 3 int i; 4 char ch; 5 char* t = malloc((al + bl + 1)* sizeof(ch));//强制类型转换不能够(char*)这样过不了google style有一个什么Using C-style cast. Use reinterpret_cast<char*>然而本地编译器并用不了,还要注意malloc分配空间应该是多少 6 for (i = 0; i < al; i++) { 7 *(t + i) = *(a + i); 8 }//我的是一个一个赋值过去,用memcpy更快 9 for (i = al; i < al + bl; i++) { 10 *(t + i) = *(b + i - al); 11 } 12 *(t + al + bl) = '