不减狂娇 2016-09-25 02:58 采纳率: 100%
浏览 1260
已采纳

string的迭代器解引用不是不改变迭代器本身指向的吗?怎么回事

string的迭代器解引用不是不改变迭代器本身指向的吗?怎么回事
贴上源码

 #include <iostream>
#include <string>
using namespace std;
int main(void) {
    int N;
    cin >> N;
    for(int i=1;i<=N;i++){
        string p;
        cin >> p;
        for(string::iterator j=p.begin();j!=p.end();j++){
            if(*j == ']' || *j == ')'){
                if(j == p.begin()) break;
                if(*(j-1) == '(' && *j == ']') break;
                if(*(j-1) == '[' && *j == ')') break;
                for(string::iterator k=j-1;k!=p.begin();){
                    if((*j == ']' && *k == '[') || (*j == ')' && *k == '(')){
                        p.erase(j);
                        p.erase(k);
                        break;
                    }else k--;
                }
            }else continue;
        }
        if(p.empty()) cout << "Yes" << endl;
        else cout << "No:" << p << endl;
    }
}

下面是调试截图
调试截图
为什么我解引用完迭代器指向会变表情
还有,我的字符串第一个字符明明是(怎么变成\0了

  • 写回答

1条回答

  • jimmy_carter_714 2016-09-25 04:56
    关注

    第一次p j 值为'\0'是因为那一句初始化还没有执行。还有p.erase(j)会导致迭代器j失效,后面的程序会崩溃一旦执行++操作会崩溃的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示