下面是一个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;
}在这里,我使用迭代器,在字符前面插入.之后。我在递增迭代器,因为insert方法将迭代器设置为插入新字符的位置。
但是发生了一些奇怪的事情,我得到了一些输入的运行时错误:
例如:
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 我无法理解为什么会发生这种情况,请帮助我。
注意:我知道解决这个问题还有其他的方法,但我很想知道这里发生了什么。
发布于 2020-04-01 09:01:32
插入方法将迭代器设置为插入新字符的位置。
不,它没有,它将迭代器返回给插入的字符。尝尝这个
it = s.insert(it, '.');
it++;或者更简单
it = s.insert(it, '.') + 1;https://stackoverflow.com/questions/60966998
复制相似问题