Прежде всего, у вас есть доступ из-за
for (int i = 0; i <= str.length(); i++)
// ^^^^
, следовательно, поведение вашей программы не определено .Вы хотите перебрать один за другим размер строки.Кроме того, цикл выполняется только в том случае, если строка не пуста ( credits @ jww ).
Во-вторых, существует сравнение между int
и unsigend int
(т.е. str.length()
) что тоже не нужно .
И последнее, но не менее важное: добавьте правильный заголовок для 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]);
}