首页 > 试题广场 >

编写strcat函数。

[问答题]
编写strcat函数
已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc); 其中strDest 是目的字符串,strSrc 是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat。
(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?
推荐
(1)VC源码:
char * __cdecl strcat (char * dst, const char * src)
{
    char * cp = dst;
    while( *cp )
        cp++; /* find end of dst */
    while( *cp++ = *src++ ) ; /* Copy src to end of dst */
        return( dst ); /* return dst */
}
(2)方便赋值给其它变量 
编辑于 2015-02-04 11:49:00 回复(0)
char* strcat(char* dst, const char* src)
{
    unsigned int dstLen = 0;
    unsigned int srcLen = 0;

    if (dst)
    {
        while(dst[dstLen])
        {
            dstLen++;
        }
    }

    if (src)
    {
        while(src[srcLen])
        {
            srcLen++;
        }
    }

    char* str = new char[dstLen + srcLen + 1];
    str[dstLen + srcLen] = '\0';

    if (dst)
    {
        for (unsigned int i = 0; i < dstLen; i++)
        {
            str[i] = dst[i];
        }
    }

    if (src)
    {
        for (unsigned int i = 0; i < srcLen; i++)
        {
            str[dstLen + i] = src[i];
        }
    }

    return str;
}

2. 如果传入的字符串是常量,将无法直接连接成功,需要创建一个新的字符串。
发表于 2021-03-22 21:24:00 回复(0)
char *strcat(char *dst, const char *src)
{
    assert(dst && src);//防止空指针
    char *ret = dst;//保存起始位置
    while(*dst++);//指针指向\0
    while ((*dst++ = *src++));//赋值(包括\0)
    return ret;//返回目的指针首地址
}
发表于 2020-10-09 00:32:08 回复(0)
char *strcat (char *strDest, const char *strSrc)
{
     char *str = strDest;
     assert((strDest != NULL)&&(strSrc != NULL));

    while(*strDest != NULL)
    {
         strDest++;
    }

   while((*strDest++ = *strSrc++) != '\0')
   {
     ;
   }
   return str ;
}
发表于 2020-05-22 21:26:37 回复(0)
链接:https://www.nowcoder.com/questionTerminal/cde456edaa4a4274997a195c2a3fe9e8
来源:牛客网

char *strcats(char *desc, const char *src) {
    size_t desc_len = 0, src_len = 0;
    while (desc[desc_len]) {
        ++desc_len;
    }
    while (src[src_len]) {
        ++src_len;
    }
 
    char *result = (char *) malloc(desc_len + src_len);
 
    int index = 0;
    for (int i = 0; i < desc_len; ++i, ++index) {
        result[index] = desc[i];
    }
    for (int j = 0; j < src_len; ++j, ++index) {
        result[index] = src[j];
    }
 
    return result;
}
发表于 2019-10-31 09:39:51 回复(0)
char *strcats(char *desc, const char *src) {
    size_t desc_len = 0, src_len = 0;
    while (desc[desc_len]) {
        ++desc_len;
    }
    while (src[src_len]) {
        ++src_len;
    }

    char *result = (char *) malloc(desc_len + src_len);

    int index = 0;
    for (int i = 0; i < desc_len; ++i, ++index) {
        result[index] = desc[i];
    }
    for (int j = 0; j < src_len; ++j, ++index) {
        result[index] = src[j];
    }

    return result;
}

发表于 2019-03-15 15:00:39 回复(0)