正确地从文本文件中读取

时间:2014-10-31 23:54:07

标签: c++ string text vector format

我正在从文本文件中的一行读取字符串,并且由于某种原因,代码将不会读取整个文本文件。它读取到一些随机点,然后停止并从一行或几行中遗漏几个单词。这是我的代码。

string total;
 while(file >> word){
    if(total.size() <= 40){
        total +=  ' ' + word;
    }
    else{
        my_vector.push_back(total);
        total.clear();
    }

以下是文件

的示例
  

该计划证明所有带有Informed-Sport标志的营养补充剂和/或成分已经过世界级体育反兴奋剂实验室LGC的禁用物质测试。选择使用补品的运动员可以使用上述搜索功能查找经过严格认证过程的产品。

直到“通过”并且遗漏了最后四个单词。

我希望输出是整个文件。不仅仅是其中的一部分。 这就是我打印矢量的方式。

for(int x = 0; x< my_vector.size(); ++x){
    cout << my_vector[x];
    }

3 个答案:

答案 0 :(得分:3)

你错过了两件事:

首先:如果total.size() is not <= 40 i.e >40移动到您刚刚更新my_vector的其他部分,但忽略您从文件中读取的word中的当前数据。您实际上需要在total之后更新total.clear()

第二:当您的循环终止时,您也会忽略word中的数据。你需要考虑那个和push_back() in vector(如果req,取决于你的程序逻辑)。

总的来说,你的代码看起来会像这样。

string total;
while(file >> word)
{
    if(total.size() <= 40)
    {
        total +=  ' ' + word;
    }
    else
    {
        my_vector.push_back(total);
        total.clear();
        total +=  ' ' + word;
    }
}
my_vector.push_back(total);//this step depends on your logic 
                           //that what u actually want to do

答案 1 :(得分:0)

读取文件末尾时,循环结束。但是,此时您仍然拥有total中的数据。在循环之后添加这样的东西:

if(!total.empty()) {
    my_vector.push_back(total);
}

将最后一位添加到矢量。

答案 2 :(得分:0)

有两个问题:

  1. 40 < total.size() total推送至my_vector但当前word未推送至total。如果my_vector.push_back(total),您应该无条件地将该字词附加到40 < total.size()然后push_back()
  2. 当循环终止时,您仍然需要total 40的内容,因为它的大小可能不会超过total。也就是说,如果在循环终止后my_vector为非空,则仍需将其附加到{{1}}。