为什么调用此函数时出现分段错误错误?

时间:2020-06-15 04:56:18

标签: c++ dictionary vector stl

下面的函数接收两个参数,一个是包含字符串的“ magazine”,另一个是还包含note的“ note”。如果“杂志”包含所有“注释”字符串,我们必须打印,否则打印

void checkMagazine(vector<string> magazine, vector<string> note) {

    map<string, int> m;
    int n = magazine.size();

    for(int i=0; i<n ; i++){
        if(m.find(magazine[i]) == m.end())
            m[magazine[i]] = 1;
        else
        m[magazine[i]]++;
    }

    for(int i=0; i<n; i++){
        if(m.find(note[i])==m.end()){
           cout<<"No"<<endl;
           return;
        }
        else{
            m[note[i]]--;
        }
    }
    cout<<"Yes"<<endl;
}

2 个答案:

答案 0 :(得分:0)

在修正错误之后,这是我的正确代码:

void checkMagazine(vector<string> magazine, vector<string> note) {

    map<string, int> m;
    int n = magazine.size();

    for(int i=0; i<n ; i++){
        if(m.find(magazine[i]) == m.end())
            m[magazine[i]] = 1;
        else
            m[magazine[i]]++;
    }

    n = note.size();
    for(int i=0; i<n; i++){
        if(m.find(note[i]) == m.end() || m[note[i]] == 0){
           cout<<"No"<<endl;
           return;
        }
        else{
            m[note[i]]--;
        }
    }
    cout<<"Yes"<<endl;
}

答案 1 :(得分:0)

您应该在开始第二个循环之前将“ n” 初始化为“ notes” 的大小。 仍然要获得正确的解决方案,您需要将“ if(m.find(note [i])== m.end()){” 更新为“ if(m.find (note [i])== m.end()|| m [note [i]] == 0){“