如何在 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 堆栈,然后将字符从堆栈顶部弹出,放入一个新字符串中。
他们会被逆转。
大家好,我的反向复制方法有些问题。该方法需要反向复制 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 堆栈,然后将字符从堆栈顶部弹出,放入一个新字符串中。
他们会被逆转。