gpt4 book ai didi

c - 不使用指针反转字符串

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:47 24 4
gpt4 key购买 nike

我应该将 char orig[] 复制到 char reversed[] 并将其反转。我的函数有效,但没有正确重置字符串,空字符串返回先前的测试结果这一事实证明了这一点。我该如何解决这个问题?

 void reverse(char orig[], char reversed[]) {
int lastChar = strlen(orig) - 1;
int lastCopy = lastChar;

int i;
for(i = 0; i < lastChar; i++){

reversed[lastCopy] = orig[i];
reversed[i] = orig[lastCopy];
lastCopy--;

reversed[lastChar+1] = '\0';
}

return ;
}

这是我得到的输出:

Test "software" (Pass, returns: erawtfos)
Test the empty string
Assertion failure
Have: <erawtfos>
Expect: <>

Test a long string (Pass)
Test a simple palindrome (Pass)
4 assertions: 3 passed 1 failed

最佳答案

OP 问题:当原始字符串orig 的长度为0 或1 时,reversed 永远不会设置空字符。

而是创建一个简单的循环,一次拉取 1 个 char

// As `orig` elements are not changed, good C style to make it `const`
void reverse(const char orig[], char reversed[]) {

// use `size_t` as `int` may be too narrow
size_t length = strlen(orig);

size_t i;
for(i = 0; i < length; i++) {
reversed[i] = orig[length - i - 1];
}

reversed[i] = '\0';
}

如果 origreversed 可能重叠,则需要一个临时副本。

void reverse(const char orig[], char reversed[]) {
size_t length = strlen(orig);
char tmp[length+1]; // Add 1 because an array of size 0 is UB
memcpy(tmp, orig, length);

size_t i;
for(i = 0; i < length; i++) {
reversed[i] = tmp[length - i - 1];
}

reversed[i] = '\0';
}

关于c - 不使用指针反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com