首页 > 解决方案 > 了解使用 ^= 反转字符串的 C++ 函数

问题描述

下面的代码返回一个反转的字符串。例如,它接受输入“ codebyte”并返回“ etybedoc”。

string FirstReverse(string str) {
    for(int i = 0, j = str.length() - 1; i < str.length() / 2; i++, j--)
    {
        str[i]^=str[j]^=str[i]^=str[j];
    }
    return str;
}

我不知道这个功能是如何工作的:

  1. 为什么^=使用 - 运算符?它是按位运算符,但为什么在这里使用它?
  2. 为什么str.length()在for循环中除以2?
  3. str[i]和的变化是str[j]什么?

我想用价值观来工作,但我不知道从哪里开始。我使用的介绍性教科书没有涵盖这一点。

标签: c++stringbitwise-operators

解决方案


作为答案:

  • 这是一种交换功能,类似于著名的 bit-twiddling hacks。
    • 可以在此处找到有关此交换机制的详细说明。
  • 长度除以二,否则您将撤消每个交换并再次以原始字符串结束。
  • 索引ij相互对抗(分别从开始或结束)。

推荐阅读