您好我正在尝试开发一个可以从文本文件中读取的程序,例如
Edward Elric : 2000 300 3000 300
Super Trunks : 100 300 4000 900
Saitama Genos:
Goku Black: 12 333 33
我希望程序开始读取每行中的分数,但跳过空格,例如每条记录最多有4个分数,但有些记录的分数少于4分,用空格表示,我希望程序读取这些记录滑动白色空间我希望这个重复,直到下面的文件结尾是我为这部分编写的代码我很困惑,我将如何继续这样做,所有的帮助表示赞赏
答案 0 :(得分:0)
我会改变你的程序的一些事情
使用std::ws
有效地放弃对std::getline
的读取之间的换行符:
for(std::string line; std::getline(file>> std::ws, line);)
跟踪您能够在value
中读取的值的数量:
std::istringstream f(scores);
size_t values_read = 0;
while(f >> values[values_read] && ++values_read < 4)
{
}
for (size_t i = 0; i < values_read; ++i)
std::cout << values[i] << " ";
std::cout << std::endl;
输出:
2000 300 3000 300
100 300 4000 900
12 333 33
答案 1 :(得分:0)
我认为你可以使用std::getline来获得更大的优势,因为它不会获得它将读取到你指定的字符的行。例如冒号(:
):
for(std::string line; std::getline(file, line);)
{
// turn the line into a stream
std::istringstream f(line);
std::getline(f, line, ':'); // skip past ':'
// read all the numbers one at a time
for(int v; f >> v;)
std::cout << v << ' ';
std::cout << '\n';
}
<强>输出:强>
2000 300 3000 300
100 300 4000 900
12 333 33
答案 2 :(得分:0)
也许使用来自std::vector
的真棒#include <vector>
,如下所示:
int main()
{
string SampleStr = "2000 300 3000 300";
vector<string> valuesSeperated;
string temp;
for(int i = 0; i < SampleStr.size(); i++)
{
if(SampleStr[i] == ' '|| SampleStr[i] == '\n')
{
valuesSeperated.push_back(temp);
temp.clear();
}
else
temp.push_back(SampleStr[i]);
}
return 0;
}