繁体   English   中英

如何使用C ++提取由空行分隔的行并将其存储为数组

[英]How to Extract a lines separated by blank lines and store it an array using C++

我有一个文件,如下所示:

*|NET s2 0.019760FF
C1_4 I_1:ZN 0 0.000000FF
C2_4 I_2:A 0 0.000000FF

*|NET s3 0.019760FF
C1_3 I_2:ZN 0 0.000000FF
C2_3 I_3:A 0 0.000000FF

现在假设我有一个字符串数组,

std::vector<std:vector<string>> my_vec

我必须解析此文件并从* | NET提取所有行,直到到达空行并将这些行存储在my_vec [0]中。 类似地,来自* | NET的接下来的3行必须存储在my_vec [1]中。

由于我是C ++的新手,并且不习惯使用文件,因此需要一些帮助来解决此问题。

这是要遵循的一组步骤:

  1. 使用ifstream读取文件
  2. 在可以读取流的同时,读取字符串(流的提示operator>>
  3. 如果读取的字符串是*|NET push_back()my_vec的向量
  4. push_back()my_vec back()处的向量的字符串

线总是按3分组吗? 我宁愿使用TStringList及其函数LoadFromFile() 这将生成一个列表,每行都存储为该列表的单独元素,并且可以使用->operator [](i)进行访问,其中i是该行的索引(int)。

如果它们被3分组,则可以进行for循环,在其中取i,i + 1和i + 2并将它们添加到my_vec[j] (其中j是向量的适当元素)。 请注意,列表元素的类型将为AnsiString,使用c_str()函数可以轻松更改其类型并将其转换为字符串。 即,您可以这样listOfLines->operator [](i).c_str()listOfLines->operator [](i).c_str()然后,您可以简单地将j递增1,将i递增3。当到达列表末尾时,循环应该结束->即i < listOfLines->Count() - 2

如果这些行未按3进行分组,则可以进行循环以首先搜索空的AnsiString,然后获取它们的索引并将它们放在另一个数组中。 然后,在另一个循环中,类似于上面的循环,可以获取此数组的j元素,并使用arrayOfEmptyRowNumbers[j]递增i。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM