又是我。在下面为我的程序获取运行时错误。我正在运行这段代码 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/