2015-06-04 76 views
0

我有一個基本的文本文件,每行有一個條目,大多數條目都是數字,但是有幾行文字和(均勻間隔) 在他們中。這裏是之間的一個這樣的間距和一個例子:C++將帶有數字和字的文本文件列表轉換爲整數2D數組

<event> 
4 
0 
0.1005960E+03 
0.2722592E+03 
0.7546771E-02 
0.1099994E+00 
21 
-1 
0 
0 
501 
502 
0.00000000000E+00 
0.00000000000E+00 
0.17700026409E+03 
0.17700026409E+03 
0.00000000000E+00 
0. 
-1. 
21 
-1 
0 
0 
502 
503 
0.00000000000E+00 
0.00000000000E+00 
-0.45779372796E+03 
0.45779372796E+03 
0.00000000000E+00 
0. 
1. 
6 
1 
1 
2 
501 
0 
-0.13244216743E+03 
-0.16326397666E+03 
-0.47746002227E+02 
0.27641406353E+03 
0.17300000000E+03 
0. 
-1. 
-6 
1 
1 
2 
0 
503 
0.13244216743E+03 
0.16326397666E+03 
-0.23304746164E+03 
0.35837992852E+03 
0.17300000000E+03 
0. 
1. 
</event> 

我需要做的是創建一個數值矩陣(僅使用的數值),其中每個列保存的每個單獨的實例和之間的所有數據值。

這是我到目前爲止有:

using namespace std; 

int main() 
{ 
    vector <string> data; 
    string str; 

    ifstream fin("final_small.txt"); 
    while (fin >> str) 
    {     
    data.push_back(str); 
    } 
    fin.close(); // Close the file. 

int N = data.size(); 

    int matrix[13][19]; 

    for (int i = 0; i < 13; i++) { 
     for (int j = 0; j < 19; j++) { 

    matrix[i][j] = data[i]; 

} 
} 
} 

顯然,這是一項正在進行的龐大的工作。首先,我將文本文件讀入一個向量,因爲這些單詞不能是int類型。然後,當我嘗試將其輸入到矩陣中時,這會導致問題。

有沒有人有任何建議?

提前致謝!

+0

那麼,人們可以給出提示,爲每一行創建一個字符串,然後從每個字符串創建一個流。每個流將被讀取以填充矩陣中的一行。如果嘗試從該流讀取數字(使用通常的>>)失敗,則必須讀取可以忽略的「and」,iiuc。然後流必須重置,其餘的「和」必須被讀取,並且讀取int直到eof。 –

回答

2

在C++ 11中,使用std :: stoi將字符串轉換爲int。請注意,如果無法執行轉換,則std :: stoi將拋出std :: invalid_argument類型的異常。

1

你能舉一些例子輸入嗎?你可以做的是遍歷每一行,只轉換數字字符。你可以用stdlib函數isdigit()來檢查它,你可以看到here。然後您可以使用atoi()進行數字轉換。希望這可以幫助!

+0

謝謝你們!我用我的輸入文件的例子更新了主題。我正在考慮你們兩個都引用了什麼 – khfrekek

+0

看過你提供的示例輸入後,我的方法好像不需要太多改變。再次遍歷每一行,並確保所有條目都是字母數字(你可以在stdlib.h中使用'isalnum()'來做這個)。如果該行是字母數字,那麼使用stdlib的'atof'方法(文檔[here](http://www.cplusplus.com/reference/cstdlib/atof/))將其轉換爲浮點數。 –