我试图通过交换两个连续的字母来进行基本的字符串加密。 而且它并没有真正按照我的预期工作。
#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.
答案 0 :(得分:5)
首先,由于
,您无法访问for (int i = 0; i <= str.length(); i++)
// ^^^^
因此behavior of your program is undefined。 您想迭代一个超过字符串大小的位置。除此之外,仅在字符串不为空的情况下循环( credits @jww )。
第二,在int
和unsigend int
(即str.length()
)which is also not you want之间进行了比较。
最后但并非最不重要的一点是,为std::string
添加适当的标头(如@PaulMcKenzie在评论中指出的)。
总共,您可能想要这个
#include <string>
for (std::size_t i = 0; !str.empty() && i < str.size()-1; i += 2) {
// ^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^
std::swap(str[i], str[i + 1]);
}
答案 1 :(得分:4)
我认为您的目标是:
std::string str = "This is a simple string.";
for (int i = 0; i <= str.length()-2; i+=2)
{
std::swap(str[i], str[i + 1]);
}
std::cout << str;
有输出
hTsii s aispmels rtni.g