[英]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.