首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Euler #22 C++项目

Euler #22 C++项目
EN

Stack Overflow用户
提问于 2013-08-29 15:13:51
回答 1查看 1.2K关注 0票数 1

我正在处理C++中的euler问题,并且在问题22上被我的代码卡住了。下面是我的cpp,我得到的答案是871202730,或者说太高了。我已经输出了排序列表,并检查了一些名字的分数计算正确,并且我有正确的名字数。希望这是一件简单的事情,我只是需要一些新鲜的眼睛来审视它。链接到问题。

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

int main() {
    int sum = 0;
    vector<string> names;
    char name[50], junk[5];
    string str;
    ifstream inFile;
    inFile.open("docs/names.txt");

    while(!inFile.eof()) {
        inFile.getline(junk, 50, '/"');
        inFile.getline(name, 50, '/"');
        stringstream sstr;
        sstr << name;
        sstr >> str;
        names.push_back(str);
    }

    sort(names.begin(), names.end());

    for(int i=0; i<names.size(); i++) {
        int namesum = 0;
        for(int j=0; j<names[i].size(); j++)
            namesum += (names[i][j] - 64);
        sum += (namesum*i);
    }

    cout << "Sum: " << sum << endl;
    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-29 15:48:56

读取流时,直到输入操作尝试读取文件末尾之后才设置文件结束标志,然后失败。所以你不能

代码语言:javascript
复制
while (!inFile.eof()) { ... }

如果您这样做,则输入操作将失败,并且无法正确更新输入字符串。

相反,你应该这样做:

代码语言:javascript
复制
while(inFile.getline(junk, 50, '"') && inFile.getline(name, 50, '"')) { ... }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18514769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档