c++ - 我的代码中出现运行时错误的可能原因是什么?

标签 c++

又是我。在下面为我的程序获取运行时错误。我正在运行这段代码 C++ 5.3.0 - GNU C++ 编译器选项:-lm -lcrypt -O2 -pipe -DONLINE_JUDGE

我的代码是....

#include <iostream>
#include <string>
#include <queue>
#include <map>
#include <vector>

using namespace std;



struct myString{
    string inputString;
    string lowerString;
    string key;

    myString(string str)
    : inputString(str)
    {
        priority_queue<char> q;
        lowerString = "";
        for(int i=0;i<str.length();i++){
            char ch = tolower(str[i]);
            lowerString += ch;
            q.push(ch);
        }
        key = "";
        while(!q.empty()){
            key += q.top();
            q.pop();
        }
    }
};
struct CompareString {
    bool operator()(myString const& ms1, myString const& ms2)
    {
        string s1 = ms1.inputString;
        string s2 = ms2.inputString;

        bool result = true;
        int minLen = s1.length();
        if(minLen > s2.length())
            minLen = s2.length();

        for(int i=0;i<minLen;i++){
            if(isupper(s1[i]) && isupper(s2[i])){
                if(s1[i] < s2[i]){
                    return false;
                }else if(s1[i] > s2[i]){
                    return true;
                }
            }else if(isupper(s1[i])){
                return false;
            }else if(isupper(s2[i])){
                return true;
            }else if(s1[i] < s2[i]){
                return false;
            }else if(s1[i] > s2[i]){
                return true;
            }
        }
        return s2.length() > s1.length();
    }
};


int main(){
    string str;
    priority_queue<myString, vector<myString>, CompareString> sortedInput;
    map<string,int> presenceCount;
    while((cin >> str), str != "#"){
        myString ms(str);
        sortedInput.push(ms);

        map<string, int>::iterator it = presenceCount.find(ms.key);
        if(it == presenceCount.end()){
            presenceCount.insert(make_pair(ms.key,1));
        }else {
            it->second++;
        }
    }

    while(!sortedInput.empty()){
        myString ms = sortedInput.top();
        map<string, int>::iterator it = presenceCount.find(ms.key);
        if(it->second <= 1)
            cout << ms.inputString << endl;
        sortedInput.pop();
    }

    return 1;
}

我正在学习 C++。并尝试解决一些 uva 问题。现在我正在尝试问题编号 156 - Ananagrams 有人请帮助我理解为什么我在这里遇到运行时错误??

最佳答案

在没有任何输入的情况下运行此代码以 std::bad_alloc 结尾.

这让我知道您读取的数据不正确,所以我发现了这一行:

while((cin >> str), str != "#")

这不符合您的预期。逗号运算符被评估为右侧表达式的结果。因此,当没有读取时,str 为空 str != "#" 始终为真,循环永不结束。

像这样修复它:

while((cin >> str) && str != "#")

我没有检查你的代码中是否还有其他错误。

关于c++ - 我的代码中出现运行时错误的可能原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693725/

相关文章:

c++ - 如何将由矩形(边界框)裁剪的 voronoi 图转换为一组多边形?

c++ - 这两个标题有什么区别?

c++ - Ceres 求解器 : unable to disable logging (google glog)

c++ - Dijkstra 的复杂性是否正确?

c++ - 在 C++ 的可变参数模板中获取可变参数 size_t... 参数的总和

c++ - 使用 gcc 编译内联汇编时出错, "shl"

c++ - 浮点舍入为 80 位寄存器和 64 位 double : ill-formed code or gcc/clang bug? 提供不同的结果

c++ - 如何配置项目的 CMakeLists.txt 文件以在 Qt Creator 中将项目分开而不是一个项目

c++ - 我怎么知道处理器是否有 xmm 寄存器或 ymm 寄存器

c++ - 查找抛出 std::out_of_range 的对象