c – 编译器为Project Euler#22提供不同的答案
|
我正在做项目欧拉#22:
使用Cygwin的gcc-g编译器编译下面的代码,答案是871129635.但是使用Visual Studio 2008,答案是正确的,871198282.为什么会这样? #include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
bool strCmp(string x,string y) {
if(x.compare(y) == -1)
return true;
else
return false;
}
int getScore(string s) {
int score = 0;
for(unsigned int i = 0; i < s.length(); i++)
score += (((int) s.at(i)) - 64);
return score;
}
int getTotalScore(vector<string> names) {
int total = 0;
for(unsigned int i = 0; i < names.size(); i++)
total += (getScore(names[i]) * (i+1));
return total;
}
int main() {
vector<string> names;
ifstream namesFile("names.txt");
char curChar;
string curName = "";
//get names from file
if(namesFile.is_open()) {
while(!namesFile.eof()) {
curChar = namesFile.get();
if(isalpha(curChar))
curName.push_back(curChar);
else {
if(!curName.empty()) {//store finished name
names.push_back(curName);
curName.clear();
}
}
}
}
namesFile.close();
//alphabetize
sort(names.begin(),names.end(),strCmp);
//count up name scores
cout << getTotalScore(names) << endl;
return 0;
}
解决方法
这里:
if(x.compare(y) == -1) 您假设std :: string :: compare将返回-1以获得小于结果,但实际上它可以返回任何负值.你可以通过使用x.compare(y)<来解决这个问题. 0,但最好只写x< y.实际上,您甚至不需要strCmp函数,因为std :: sort的默认行为是使用operator<来比较元素. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
