簡體   English   中英

如何在C ++中進行反向char復制

[英]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]='\0';
    return destination;
}

目標是存儲副本的位置。

源被復制為char

Num是數組中的字符數

任何見解均表示贊賞。 謝謝

使用標准庫算法會騙人嗎?

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

但是,有更簡便,更快速的方法來執行此操作:例如,為什么需要循環將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] = '\0';

    return destination;
}

您始終可以將它們轉換為字符串,並通過復制功能使用source.rbegin()。

我可以這樣寫該函數:

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

將字符串(逐個字符)推入STL堆棧,然后將字符從堆棧頂部彈出,放入新字符串。

它們將被逆轉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM