gpt4 book ai didi

c++ - `std::swap` 在字符串操作中没有按预期工作

转载 作者:太空狗 更新时间:2023-10-29 19:56:02 25 4
gpt4 key购买 nike

我试图通过交换两个连续的字母来进行基本的字符串加密。它并没有真正按照我的预期工作。

#include <iostream>
#include <string.h>
#include <algorithm>

int main()
{
std::string str = "This is a simple string.";
for (int i = 0; i <= str.length(); i++) {
std::swap(str[i], str[i + 1]);
}
std::cout << str;
std::cin.get();
}

我实际上想交换两个相邻的字母,所以它看起来像是加密的。当前结果是

his is a simple string.

最佳答案

首先,你有越界访问,因为

for (int i = 0; i <= str.length(); i++) 
// ^^^^

因此 behavior of your program is undefined .你想迭代一个超过字符串的大小。除此之外,仅当字符串不为空时才循环(credits @jww)。

其次是intunsigend int的比较(即str.length())which is also not you want .

最后但同样重要的是,为 std::string 添加正确的 header (@PaulMcKenzie 在评论中指出)。

总而言之,你可能想要这个

#include <string>

for (std::size_t i = 0; !str.empty() && i < str.size()-1; i += 2) {
// ^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^
std::swap(str[i], str[i + 1]);
}

关于c++ - `std::swap` 在字符串操作中没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516977/

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