如何在 C++ 中进行反向字符复制

How to do a reverse char copy in C++

大家好,我的反向复制方法有些问题。该方法需要反向复制 char*。

char* reverseCopy(char* destination, const char* source, int num)
{
    char placeHolder;
    for (int j=0; j<=num; j++)
    {
        strcpy(destination,source);
    }

    for (int i=0; i<num; num--)
    {
        placeHolder = destination[num];
        destination[i]=placeHolder;
    }
    destination[num]='[=10=]';
    return destination;
}

目的地是存储副本的地方。

来源是复制的字符

Num是数组中的字符数

如有任何见解,我们将不胜感激。谢谢

您始终可以将它们转换为字符串并使用带有复制功能的 source.rbegin()。

但是有更简单快捷的方法可以做到这一点: 例如,为什么你需要在循环中将 source 复制到 destination

如果 destination == source 呢?

还有这个循环:

for (int i=0; i<num; num--)
{
    placeHolder = destination[num];
    destination[i]=placeHolder;
}

写错了,即使它是一个正确的写循环,你也会覆盖destination中的非还原数据。

我希望这样的事情能奏效(考虑 source == destination 可能的情况):

char* reverseCopy(char* destination, const char* source, int num) {
    if (destination != source)
    {
        std::copy ( source, source + num - 1, destination );
    }
    std::reverse(destination ,destination + num - 1);
    destination[num-1] = '[=11=]';

    return destination;
}

我可能会这样写那个函数:

char* reverseCopy(char* destination, const char* source, int num) {
    char* d = destination;
    while (num) {
        *d++ = source[--num];
    }
    *d = '[=10=]';
    return destination;
}

使用 standard library algorithm 会作弊吗?

char* reverseCopy(char* destination, const char* source, int num)
{
    std::reverse_copy(source, source + num, destination);
    destination[num] = '[=10=]';
    return destination;
}

将字符串一个字符一个字符地推入 STL 堆栈,然后将字符从堆栈顶部弹出,放入一个新字符串中。

他们会被逆转。