我从文本文件中的一行读取字符串,由于某种原因,代码将不会读取整个文本文件。它读到某个随机点,然后停下来,从一行或几行中删除几个单词。这是我的密码。
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];
}发布于 2014-11-01 02:47:20
你错过了两件事:
第一:万一total.size() is not <= 40 i.e >40移动到其他部分,您只需更新my_vector,而忽略从文件中读取的word中的当前数据。实际上,您需要在total之后更新total.clear()。
第二:当您的循环结束时,您也会忽略word中的数据。您需要考虑向量中的push_back()(如果是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发布于 2014-11-01 01:10:32
当读取文件结束时,循环就结束了。然而,此时您仍然拥有total中的数据。在循环后添加类似的内容:
if(!total.empty()) {
my_vector.push_back(total);
}将最后一个位添加到向量中。
发布于 2014-11-01 01:41:06
有两个问题:
40 < total.size()只将total推送到my_vector时,而当前word则没有。您可能应该无条件地将这个单词附加到total,然后再添加到my_vector.push_back(total) if 40 < total.size()。push_back() total的内容,因为它可能还没有达到40的大小。也就是说,如果total在循环结束后为空,则仍然需要将其附加到my_vector中。https://stackoverflow.com/questions/26684987
复制相似问题