如何实现与char* strcat(char* strDest, const char* strSrc)类似的功能?

假设strSrc指向的字符串为a1B2C3,则只把其中的字母aBC添加到指针strDest指向的字符串后

#include <iostream>
using namespace std;

char* mystrcat(char* strDest, const char* strSrc)
{
    char* p = strDest;
    while (*p != NULL)
        p++;
    while (*strSrc !=NULL)
    {
        if (*strSrc >= 'a' && *strSrc <= 'z' || *strSrc >= 'A' && *strSrc <= 'Z')
        {
            *p = *strSrc;
        }
        strSrc++;
        p++;
    }
    *p == NULL;
    return p;
}
int main()
{
    char arr[] = "a1B2C3";
    char Dest[] = "stu";
    cout << mystrcat(Dest, arr);
    return 0;
}

就是输出后的结果是stua,无法输出剩下的B C,找了好久都不知道哪儿错了。【哭】


#include <iostream>
using namespace std;
char *mystrcat(char *strDest, const char *strSrc)
{
    char *p = strDest, *s;
    s = p;
    while (*p != '\0')
        p++;
    while (*strSrc != '\0')
    {
        if (*strSrc >= 'a' && *strSrc <= 'z' || *strSrc >= 'A' && *strSrc <= 'Z')
        {
            *p = *strSrc;
            p++;
        }
        strSrc++;
    }
    *p = '\0';
    return s;
}
int main()
{
    char arr[] = "a1B2C3";
    char Dest[] = "stu";
    cout << mystrcat(Dest, arr);
    return 0;
}

原因1. 因为While进入第二次循环后,*p指向了NULL,后面的字符串无法显示;
解决方法:

  1. p++ 写在if条件的 *p= *strSrc;下一句;
    建议:
  2. *p== NULL 改成 *p= NULL;
  3. while (*p!=NULL) 改成 if (*p!=NULL)