簡體   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