求解字符串问题,不使用其他函数

将字符串str1=“abc”连接到字符串str2="def”的后面。利用字符指针编写

不能用其它函数,strlen、strcpy、memcpy这些就都不能用。只能用指针移动的方法来拷贝,并且,在最后要把最后一个位置设置为\0;

img

代码如下:

#include <iostream>
using namespace std;
//把str2拷贝到str1后面
char* mystrcat(char* str1, char* str2)
{
    char* p = str1;
    //将指针移动到最后
    while (*p != '\0')
        p++;
    //将str2中的内容拷贝到str1
    while (*str2 != '\0')
    {
        *p = *str2;
        p++;
        str2++;
    }
    *p = '\0'; //不要漏写这一句,以便字符串能正确结束
    return str1;
}

int main()
{
    char str1[20] = "abc";
    char str2[20] = "def";
    //把str1拼接到str2后面
    mystrcat(str2, str1); //注意参数顺序
    cout << "拼接后的字符串:";
    cout << str2 << endl;
    return 0;
}

img


#include<iostream>
using namespace std;
#include<cstring>
void output(char *str1);
char *memcpy(char *str1, char *str2, int n);
int main()
{
    int n= 3;   //n代表取str2前n个字符连接到str1
    char str1[20], str2[10];
    cout << "input the string of str1、str2:" << endl;
    gets_s(str1);   //得到两个字符串
    gets_s(str2);
    cout << "input the number of n:";
    cin >> n;
    memcpy(str1, str2,n);
    cout << str1<< endl;
    return 0;
}
char *memcpy(char *str1, char *str2, int n)  //连接函数
{
    char *des = str1;
    for (; *str1 != '\0';)  //遍历str1
    {
        str1++;
    }
    for (int i = 0; i < n;i++)   // 将str2前n个字符追加至str1
    {
        *str1 = *(str2 + i);//
        str1++;
    }
    *str1 = '\0';
    return des;
}


#include<iostream>

int main()
{
    char *str1 = "abc";
    char *str2 = "def";
    char str2_1[20] = { 0 };
    char *p = str2_1;
    while (*str2)
    {
        *p = *str2;
        p++;
        str2++;
    }
    while (*str1)
    {
        *p = *str1;
        p++;
        str1++;
    }
    std::cout << str2_1 << std::endl;
    return 0;
}
#include <stdio.h>

char * strcat(char * dest, const char * src)
{
        char *tmp = dest;
 
        while (*dest)
                dest++;
        while ((*dest++ = *src++) != '\0')
                ;
 
        return tmp;
}


int main()
{
    char dst[100] = "asdf";
    const char * src = "qwer";
    char* temp = strcat(dst,src);
    printf("%s",temp);
    return 0;
}

这不是送分题?

直接上代码。

char * strcat(char * dest, const char * src)
{
    char *tmp = dest;

    while (*dest)
        dest++;
    while ((*dest++ = *src++) != '\0')
        ;

    return tmp;
}

char * strncat(char *dest, const char *src, size_t count)
{
    char *tmp = dest;

    if (count) {
        while (*dest)
            dest++;
        while ((*dest++ = *src++)) {
            if (--count == 0) {
                *dest = '\0';
                break;
            }
        }
    }

    return tmp;
}

```c