(eden)合并字符串

题目名称

合并字符串

题目描述

合并两个字符串,每个字符串长度不小于1不超过50,

主函数已经给出,在join.h头文件中完成join函数,函数原型如下:

char* join(char* a, int alength, char* b, int blength)

需要在join函数中动态申请内存,长度为a和b长度之和加1(因为字符串结尾有‘\0’); 函数返回值即所动态申请内存的首地址。

输入:两个字符串,每个一行

输出:合并后的字符串及所申请内存的实际大小,字符串一行,实际大小一行

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) = ‘\0‘;//注意加‘\0‘否则输出的时候会死循环或者出现奇怪的数,因为找不到结束
13     return t;
14 }
 1 //main.c
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #include<malloc.h>
 6 #include"join.h"
 7 #define MAX 51
 8 int main() {
 9     char a[MAX];
10     char b[MAX];
11     char* c = NULL;
12     scanf("%s", a);
13     scanf("%s", b);
14     c = join(a, strlen(a), b, strlen(b));//这个srtlen是不包括\0在内的长度
15     printf("%s\n", c);
16     printf("%d\n", malloc_usable_size(c));//这个本地编译器又没有
17     free(c);
18     return 0;
19 }
20  

标程代码

 1 #ifndef __JOINS__
 2 #define __JOINS__
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 #include<string.h>
 6 #include<malloc.h>
 7 char* join(char* a, int alength, char* b, int blength) {
 8     char* c = malloc(sizeof(a[0]) * (alength + blength + 1));
 9     memcpy(c, a, sizeof(a[0]) * alength);
10     memcpy(c + alength, b, sizeof(b[0]) * blength);
11     c[alength + blength] = ‘\0‘;
12     return c;
13 }
14 #endif

问题

①一个还是自己定义文件的问题,为什么我的里面不用include<malloc>就可以使用include<malloc>等等;

②google style出了两次问题,一个是强制类型转换,用我目前的那个可以通过,但是c = (char*)...不行,然后还有一个新的强制转换类型,没有使用过,另一个就是sizeof()里面必须是变量名,不要加类型;

③遇到了内存错误读写的问题,因为malloc开小了,malloc应该开a的长度加上b的长度(不包括‘\0’)的再加上一个‘\0‘的长度,其中注意srtlen得到的就是不包括‘\0‘的,最后记得在c加一个‘\0‘;

④memcpy不会使用

memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中;

函数原型:void *memcpy(void *dest, const void *src, size_t n);

需要头文件#include<string.h>

需要学习的地方

①同上,自己定义文件;

②强制类型转换的那个新类型;

③memcpy以及strlen等各种处理字符函数的使用,还有各种头文件的说明;

④动态内存分配。

(以后这些需要学习的地方要学习,还有问题需要解决,之后总结分成随笔发布)

时间: 2024-08-01 10:43:43

(eden)合并字符串的相关文章

matlab数据转换为字符串并合并字符串标注到图像曲线上

1.把数字转换为字符串 [函数描述]str=num2str(A):把数组A中元素取小数点后四位,并转换为字符串. [函数实例]把数字转换为字符串,输入语句: str1=num2str(pi) str2=num2str(eps) 输出结果: str1 =3.1416 str2 =2.2204e-016 2.字符串合并 strcat(str1,str2,-.,strn); 将str1,str2,-strn合并成为一个字符串 3.通过 gtext(str);可以把字符串标注到图像上面,注意str一定要

合并字符串

1 # -*- coding: utf-8 -*- 2 """ 3 合并字符串 4 5 涉及的函数 6 join():性能优于+操作 7 formatString % (pieces):对于少量字符串(尤其是变量中的 8 字符串),需要拼接,或者还需要加入额外的信息,该方法较好 9 %s暗中帮我们做了很多工作,如调用str方法,还能指定浮点数的 10 输出有效位数 11 +:不要用它来创建大的字符串,psyco编译器可大幅降低+=的性能损失 12 operator.add 1

关于字符串实现交叉合并字符串

交叉合并:如字符串一为:abcd  字符串二为:1234则结果为:a1b2c3d4 1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class A { 5 public static void main(String[] args) { 6 String a[] ={"a","b","c"}; 7 String b[] ={"1","

《Python CookBook2》 第一章 文本 - 去字符串两端的空格 &amp;&amp; 合并字符串 &amp;&amp; 将字符串逐字符或者逐词反转

去字符串两端的空格 任务: 获得一个开头和末尾都没有多余空格的字符串. 解决方案: 字符串对象的lstrip.rstrip和strip 方法正是为这种任务而设计的.这几个方法都不需要参数,它们会直接返回一个删除了开头.末尾或者两端的空格的原字符串的拷贝. 参考代码: >>> test_string = ' test ' >>> print '|',test_string.lstrip(),'|',test_string.rstrip(),'|',test_string.

python文本 拼接或合并字符串

python文本 拼接.合并字符串 场景: 拼接.合并字符串 在这个场景中,我们首先想到的当然是使用+或者+=将两个字符串连接起来 >>> a='a'    >>> b='b'    >>> c=a+b    >>> c    'ab'    >>> 如果整个程序只有两个字符串需要拼接,那没有问题 但是如果程序里面大量存在拼接,甚至需要循环拼接,这个时候性能问题就会出现 原因:字符串是不可原地修改的,改变一个字符串就

华为训练题:初级——合并字符串

按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串中的位置. 对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符.如字符为‘4’,为0100b,则翻转后为0010b,也就是2.转换后的字符为‘2’: 如字符为‘7’,为0111b,则翻转后为11

根据某一字段值相同合并字符串 - - SQL

做项目的过程中,遇到一个问题,相同id,不同value的记录希望合并成一条记录,value以逗号分隔,从网上搜了搜解决方案,整理如下,备忘. 一.           字符串合并 表名:test 字段: id               int name        nvarchar(50) 字段值: 期望结果: id               nameStr ----------------------------- 1                a,b,c 2            

合并字符串中连续的多个空格的C代码实现

1.问题描述 将某一字符串中连续出现的多个空格合并为一个空格,如果合并之后的字符串的首尾有空格,则将其去掉. 例如," This is a string! "是一个包含多个空格的字符串,要求其变成"This is a string!"的形式. 2.C代码实现 /********************************************************************** * 版权所有 (C)2015, Zhou Zhaoxiong. *

合并字符串问题

Do you know how many fools have sacrificed everything in pursuit to be a Neverdie?As a matter of fact,it's much easier than people expect.If one can be an information-based lifeform, then it can move from medium to medium without losing any integrity