c++ 正在转储核心[重复]

acruukt9  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(131)
    • 此问题在此处已有答案**:

What is iterator invalidation?(3个答案)
Iterator invalidation rules for C++ containers(6个答案)
2天前关闭。
这个代码有什么问题?

string s; cin>>s;
    s[0]=s[0]-32;
    replace(s.begin(),s.end(),'s','$');
    replace(s.begin(),s.end(),'i','!');
    replace(s.begin(),s.end(),'o','(');
    for (auto i = s.begin(); i != s.end(); ++i)
    {
        if (*i == '(')
        {
            s.insert(i + 1, ')');
        }
    }
    s+=".";
    cout<<s<<endl;
cd "/home/parvez/Documents/cds/" && g++ Better_Passwords.cpp -o Better_Passwords && "/home/parvez/Do[parvez@HPLP cds]$ cd "/home/parvez/Documents/cds/" && g++ Better_Passwords.cpp -o Better_Passwords && "/home/parvez/Documents/cds/"Better_Passwords
unsophisticated
Segmentation fault (core dumped)
unhi4e5o

unhi4e5o1#

您不能以这种方式更改for循环中的字符串

for (auto i = s.begin(); i != s.end(); ++i)
{
    if (*i == '(')
    {
        s.insert(i + 1, ')');
    }
}

因为在插入一个字符之后,迭代器i可能无效。

for (auto i = s.begin(); i != s.end(); ++i)
{
    if (*i == '(')
    {
        i = s.insert(i + 1, ')');
    }
}

相关问题