如何在文本文件的行尾找到'0'?

时间:2014-01-09 16:16:55

标签: c++ string text-files ifstream string-conversion

我正在扫描文本文档,其格式如下:

3 10
1
2
2
1
3
1
1
1
2
2
顶部的前两个整数分别代表候选人数和投票数。我在检查投票数量的字符串时遇到了困难,“10”

由于我在c ++工作,到目前为止我已经尝试过这样做了:

string line;
int candidateTally;
int voteTally;

ifstream file("votes.txt");

//detect the candidate tally "3"
getline(file, line);
candidateTally = atoi(line.c_str());

cout << candidateTally << endl;

//output the candidate tally "10" but it's only outputting "1"
getline(file, line);
cout << line;

我不太确定如何获取0的第二个字符串以获得“10”的完整字符串 看起来getline函数在获取0之前会中断,因为这可能代表'\ n'char? 我想拥有它以便它检测到'0'并将其包含在字符串中,并带有“1”,以便我可以将其转换为它应该是的int,10。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

问问自己getline做了什么......是的,它

所以第一次调用“获取”整行“3 10”,第二次调用获取文件中的下一行:“1”

您应该使用>>运算符从文件中读取传入的值。这也将消除弄乱atoi()和char指针的需要。

答案 1 :(得分:2)

请改用以下内容:

int candidateTally;
int voteTally;

ifstream file("votes.txt");

//detect the candidate tally "3", and the vote tally "10".
file >> candidateTally >> voteTally;

cout << candidateTally << endl;
cout << voteTally << endl;

operator>>忽略空格。它的第一个调用(file >> candidateTally)将“吃掉”“3”,第二个调用(>> votetally)将跳过空白,然后选择“10”。精度可以读取here,但细节很难阅读。

答案 2 :(得分:1)

如果您想获得候选人和投票人数,我们没有理由使用atoi

std::string line;
int candidateTally;
int voteTally;

std::ifstream file("votes.txt");

if (std::getline(file, line))
{
    std::istringstream iss(line);
    iss >> candidateTally >> voteTally; // you should also add error handling here
    // ...
}
else
{
    // handle the error here
}