首页 > 试题广场 >

请编写一个函数将字符串s2添加到字符串s1的末端,函数不受s

[问答题]
请编写一个函数将字符串s2添加到字符串s1的末端,函数不受s1、s2空间大小的限制。可以利用常用字符串函数strlen,strcpy,strcat,strcmp,strstr实现。

常用字符串函数简单描述:
strlen(char *str) : 求字符串长度。
strcpy(char *dest, char *src) : 把src拷贝到dest。
strcat(char *dest, char *src) : 把src连接到dest后面。
strcmp(char *s1, char *s2) : 按照各个字符(ascii)比较s1和s2,相等则返回0,否则返回ascii相减的结果。
strstr(char *s1, char *s2) : 在s1中查找s2,返回找到的位置,若找不到则返回NULL。
char* append(char*str1,char*str2)
{
char* temp;
int length=strlen(str1)+strlen(str2);     //计算str1与str2总共的和
temp=new char[length+1];        //申请一段足够容下str1和str2的字符串空间
strcpy(temp,str1);           //先将str1复制到字符指针temp指向的内存的起始位置
strcat(temp,str2);      //再将str2链接到str1的位置
return temp;
}

编辑于 2017-09-06 09:49:05 回复(12)
如果这是面试,最好还是要判空指针的。
发表于 2017-11-07 09:18:05 回复(0)
#include<iostream>
using namespace std;

char* strCat(char* s1,char *s2)
{
int len1 = strlen(s1);
int len2 = strlen(s2);
int len = len1 + len2 + 1;
char* s = new char[len];
strcpy(s, s1);
strcat(s, s2);
return s;
}
int main()
{
char* s1 = "hello ";
char* s2 = "windows";
char* s;
s=strCat(s1, s2);
cout << s << endl;
return 0;
}
发表于 2017-09-08 11:47:36 回复(3)
关键在于申请一个长度为两个字符串之和加1的字符串,不能直接把字符串2衔接到1上
编辑于 2017-10-17 23:27:37 回复(2)
/*要实现的这个函数功能与strcat类似,本来可以直接就用strcat这个函数,
只不过题中说没有大小限制,所以如果str2的长度超过str1剩余长度的话
str1将不能完整追加到str2的后面
所以获得str1和str2的长度,在另外开辟,然后复制进去*/

//标准答案如下
//释放操作在调用的main函数中进行,这里就不写了
char* StrCat(char* str1, char* str2)
{
    if (nullptr == str1 && nullptr == str2)
        return nullptr;
    
    if (nullptr == str1 && str2 != nullptr)
        return str2;
    
    if (nullptr == str1 && str2 != nullptr)
        return str1;
    
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    
    int len = len1 + len2 + 1;
    
    strcpy(s, s1);
    strcat(s, s2);
    
    return s;

}

编辑于 2019-08-08 16:11:13 回复(0)
char* Link(char* s1,char* s2)
{
if(s2==NULL)
return s1;
if(s1==NULL)
return NULL;
char* tem;
tem=strcat(s1,s2);
return tem;

}

发表于 2017-09-08 14:56:27 回复(1)
void my_strcat(char* &a, const char* b)
{
    int len_a = strlen(a);
    int len_b = strlen(b);
    char* c = new char[len_a+len_b];
    strcpy(c, a);
    strcat(c, b);
    a = c;
}
发表于 2022-04-19 14:37:02 回复(0)
chh
发表于 2017-12-15 13:50:48 回复(0)
#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; int main() { char str1[40],str2[40]; gets(str1); gets(str2); strcat(str1,str2); puts(str1); re
编辑于 2017-12-10 17:04:55 回复(0)
strcat(s1,s2)
发表于 2017-11-25 00:28:02 回复(0)
发表于 2017-11-08 17:46:10 回复(0)
发表于 2017-10-28 18:33:49 回复(0)
空间里
发表于 2017-10-26 02:41:17 回复(0)
结构体
发表于 2017-10-25 10:38:20 回复(0)
想问下,看到前面的朋友们的解答, int len1=strlen(s1); int len2=strlen(s2); int len=len1+len2; char *s=new char[len+1]; 我想问下这里为什么要+1?
发表于 2017-10-11 09:12:18 回复(4)
D.P头像 D.P
#include<iostream.h> usimg namespace std; char * STRCAT(char *a, char *b) { int len=strlen(a)+strlen(b); char *str=new char[len]; strcpy(str,a); strcst (str ,b); cout }
发表于 2017-09-19 15:10:34 回复(0)
#include<iostream>
#include<string>
using namespace std;
inr main()
{
   string s1,s2;
    cin >> s1;
    cin >> s2;
    int len = s1.lenth() + s2.length();
    char[]  tmp = new char[len];
    strcpy(tmp, s1);
    strcat(tmp,s2);
   return tmp;
}
发表于 2017-09-17 10:44:29 回复(0)
xxc
编辑于 2017-09-15 14:58:33 回复(0)
ai_头像 ai_
申请一段s1和s2总长度的字符串内存,分别将s1,s2用strcpy到目标位置。
发表于 2017-09-12 15:14:05 回复(0)
char* my_strcat(char* dest, char* src)
{
    char* i = dest;
    while(*i != '\0')
    {
         i++;
    }
    while(*src != '\0')
    {
        *i = *src;
        i++;
        src++
    }
    *i = '\0';
    return dest;
}

发表于 2017-09-09 15:53:56 回复(0)