正确读取文本文件

问题描述:

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

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

下面是一个文件的例子

程序证明,贴有知情体育标志的所有营养补充剂和/或成分已对禁用物质由世界级的体育反被测试LGC的掺杂实验室。选择使用补充剂的运动员可以使用上述搜索功能来查找通过严格认证流程的产品。

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

我希望输出是整个文件。不只是它的一部分。 这是我如何打印矢量。

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

请给我们一个文件和输出的例子。 – 0x499602D2 2014-11-01 00:09:17

+0

以下是一个文件示例:“该程序证明所有营养补充剂 和/或含有Informed-Sport标志的成分已由 由世界级运动会 反兴奋剂实验室,LGC进行了测试。运动员选择使用补充 可以使用上述搜索功能找到有 通过这个严格的认证过程的产品。“它读直到“通过”并遗漏了最后四个单词。 – 2014-11-01 00:13:11

+0

你能告诉我们你用来打印数据的代码吗? (把它编辑成像我这样做的问题)。 – 0x499602D2 2014-11-01 00:24:33

你错过了这里两件事情:

第一:在情况下total.size() is not <= 40 i.e >40它移动到别的部分,你只更新您的my_vector但忽略word当前数据,你从文件中读取。您实际上需要在total.clear()之后更新total。第二:当你的循环结束时,你也忽略word中的数据。你需要考虑和push_back()向量(如果需要,取决于你的程序逻辑)。

所以你的整体代码是这样的。

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 

当读取文件结尾时,循环结束。但是在这一点上你仍然有数据在total。在循环后添加如下内容:

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

将最后一位添加到向量中。

有两个问题:

  1. 40 < total.size()total推到my_vector但目前word不是。您应该无条件地将该单词追加到total,然后my_vector.push_back(total),如果40 < total.size()
  2. 当循环终止时,您仍然需要push_back()total的内容,因为它可能没有达到大于40的大小。也就是说,如果total在循环终止后不为空,则仍需将其附加到my_vector