gpt4 book ai didi

c# - 将 C# 转换为 C++ 按位移位

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

我在 c# 中有以下代码可以反转字符串:

char[] charArray = s.ToCharArray();
int len = s.Length - 1;

for (int i = 0; i < len; i++, len--)
{
charArray[i] ^= charArray[len];
charArray[len] ^= charArray[i];
charArray[i] ^= charArray[len];
}

return new string(charArray);

我正试图将其转换为 C++,作为一项智力练习。这是我目前所拥有的:

void main(void)
{
char* str = "testing";
char* result;
int len;

len = strlen(str);

if (len <= 12)
{
result = new char[strlen(str)];
for (int i = 0; i < len; i++, len--)
{
result[i] ^= str[len];
result[len] ^= str[i];
result[i] ^= str[len];
}
}
else{
std::reverse(str, &str[strlen(str)]);
}

cout << endl << result << endl;

// cleanup
str = NULL;
result = NULL;
}

在 .Net 中,如果字符串 <= 12(我认为是十二),则 xor 比数组反向更快。 Source - Sam Saffron我基本上是想看看它是否仍然适用于 C++。

字符串以一种奇怪的格式出现(准确地说是════╣¥¿ë²²²)。

有什么想法吗?

注意:我知道 else 语句不起作用,我会在之后弄明白 ;)

注意 2:我可能完全错了,所以请随时指出任何问题

更新

感谢所有参与的人。我已经好几年没玩过 C++ 了(它显示了),我认为它很容易转换,但显然不是。认为我最好放弃这个想法。再次感谢

最佳答案

一些事情:

result = new char[strlen(str)];

应该是

result = new char[len + 1];

len 因为您已经计算了 str 的长度,并且 + 1 为 NUL 终止符腾出空间。

其次,您需要在操作之前将字符串复制到 result 中,否则您的数组将充满垃圾:

strcpy(result, str);

第三,

std::reverse(str, &str[strlen(str)]);

错误的原因有两个:一是因为您不能修改字符串文字,二是因为您应该使用 result:

std::reverse(result, result + len);

但如果你这样做,你还需要先将str复制到result中。

最后,将指针设置为 NULL 不会释放它指向的内存。你必须

delete[] result; // delete[] because new[]

请注意,即使在使用 else 时也能正常工作(因此 result 不会指向已分配的内存),您需要做

char* result = NULL; // delete[] is defined as a nop on NULL pointers

如果您确定要使用 C 字符串,则以上所有内容均适用。一旦你掌握了指针的窍门,你就可以升级到 std::string:

std::string str("testing");

std::reverse(std::begin(str), std::end(str)); // or if you don't want to do it in-place,
// std::string result(str.rbegin(), str.rend());

关于c# - 将 C# 转换为 C++ 按位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169220/

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