c++ - 了解使用 ^= 反转字符串的 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;
}
我不知道这个功能是如何工作的:
- 为什么
^=
使用 - 运算符?它是按位运算符,但为什么在这里使用它? - 为什么
str.length()
在for循环中除以2? str[i]
和的变化是str[j]
什么?
我想用价值观来工作,但我不知道从哪里开始。我使用的介绍性教科书没有涵盖这一点。
解决方案
作为答案:
- 这是一种交换功能,类似于著名的 bit-twiddling hacks。
- 可以在此处找到有关此交换机制的详细说明。
- 长度除以二,否则您将撤消每个交换并再次以原始字符串结束。
- 索引
i
和j
相互对抗(分别从开始或结束)。
推荐阅读
- swagger - 如何在“../v2/api-docs”json 生成文件中启用 SecurityDefinitions
- datetime - 数据表中日期时间列的 order by 问题
- docker - 如何限制其他容器的执行,直到所有脚本都在 docker-compose 中的 docker 中的 DB 容器上执行
- java - 为什么Java varargs(int ...x,double ...y)中出现此编译错误?
- python - KeyError:'col 名称'
- html - 列中列表中的文本节点不尊重父宽度
- javascript - 并非所有车轮事件都可以在 Chrome (Opera) 中取消
- https - https 和 Service Fabric 的问题
- vba - 将变量中的数据存储到表中的字段中
- c# - 如何通过 C# 代码选择 XtraTab