Вот фрагмент кода C ++, который вставляет точку .
перед каждым символом в строке.
Вот мой код:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
for (auto it = s.begin(); it != s.end(); it++)
{
s.insert(it, '.');
it++;
}
cout << s;
}
Здесь я использую итераторы и после вставки .
перед персонажем. Я увеличиваю итератор, потому что метод вставки устанавливает итератор в положение, в которое вставляется новый символ.
Но что-то странное происходит, я получаю ошибку во время выполнения для некоторых входных данных:
Например :
Input: abcde
Output: .a.b.c.d.e
Input: abcdef
Output: .a.b.c.d.e.f
Input: abcdefg
Output: .a.b.c.d.e.f.g
Input: abcdefgh
Output: Getting runtime error
~~Dr.M~~ Error #1: UNADDRESSABLE ACCESS beyond heap bounds: reading 0x10fb4fa7-0x10fb4fa8 1 byte(s)
~~Dr.M~~ # 0 replace_memmove [d:\drmemory_package\drmemory\replace.c:802]
~~Dr.M~~ # 1 std::char_traits<>::move [C:/Programs/mingw-w64-7/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/char_traits.h:342]
~~Dr.M~~ # 2 std::__cxx11::basic_string<>::_S_move [C:/Programs/mingw-w64-7/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/basic_string.h:349]
~~Dr.M~~ # 3 std::__cxx11::basic_string<>::_M_replace_aux [C:/Programs/mingw-w64-7/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/basic_string.tcc:407]
~~Dr.M~~ # 4 std::__cxx11::basic_string<>::insert
Я не могу понять, почему это происходит, пожалуйста, помогите мне в этом.
Примечание: я знаю, что есть другие способы решения этой проблемы, но мне интересно знать, что здесь происходит.