2011-03-15 66 views
0

我是一名java/C#開發人員,我正試圖編寫一個C或C++代碼來從文本文件中讀取數據。這很容易在java和c#中完成,但不能在c或C++中完成。從C++中的TextFile中讀取

文本文件我讀這個樣子的:

a,b,c,d,e 
1,0,1,1,0 
0,1,1,0,0 
0,0,0,1,1 

我需要的值存儲在2個陣列。
一日一是一維的字符數組將包含:a b c d e
:第二個是一個二維數組布爾將包含:

1 0 1 1 0 
    0 1 1 0 0 
    0 0 0 1 1 

我怎樣才能做到這一點?

+1

[此問題](http://stackoverflow.com/questions/415515/)可能包含一些有用的信息。 – 2011-03-15 13:39:07

+0

C或C++?答案是(我認爲),或者至少可以是非常不同的。另外,你的例子中的「a,b,c,d,e」將總是由單個字符組成(即沒有「foo,bar,baz,qux,quux」)? – pmg 2011-03-15 14:13:26

+0

我建議在矢量內部存儲,如果你想稍後切換它,它會給你更多的靈活性。 – ultifinitus 2011-03-15 19:01:15

回答

1

我建議你至少嘗試一下你正在嘗試做什麼,以幫助你開始,這裏是基本讀出你提供的示例數據。這個例子應該足夠簡單,讓你可以擴展它來滿足其他數據集。

#include <iostream> 
#include <fstream> 

int main() { 
    const int n_letters = 5; 

    const int n_columns = 5; 
    const int n_rows = 3; 

    char letters[n_letters]; 
    bool booleans[n_rows][n_columns]; 

    std::ifstream stream("myfile.txt"); 
    if (stream) { 
     for (int i = 0; i < n_letters; ++i) { 
      stream >> letters[i]; 
      std::cout << letters[i] << ','; 
     } 
     std::cout << '\n'; 
     for (int i = 0; i < n_rows; ++i) { 
      for (int j = 0; j < n_columns; ++j) { 
       stream >> booleans[i][j]; 
       std::cout << booleans[i][j] << ','; 
      } 
      std::cout << '\n'; 
     } 
    } 
    return 0; 
} 

讀以下文字:

a b c d e 
1 0 1 1 0 
0 1 1 0 0 
0 0 0 1 1 

和輸出:

a,b,c,d,e 
1,0,1,1,0 
0,1,1,0,0 
0,0,0,1,1 
+0

你應該爲數字使用一個二維數組,因爲這就是op所要求的(2D ==二維)。 – Shinnok 2011-03-15 13:52:53

+0

@Sinninn,按照OP的規定進行修正 – dcousens 2011-03-15 13:58:21

0

第一個評論:解析一個文件時,它往往是有用的按行讀入 文件中的行,然後使用 std :: istringstream或boost :: regex或其他任何技術 解析每行。我喜歡boost :: regex,因爲它立即 指示是否存在語法錯誤,但是精心設計,還可以使用 istream。

無論如何,第一件事情就是更精確地指定 格式:總是隻有一個字母嗎?數字總是 只有0和1?每行總是隻有五個值? 直到我們知道這一點,我們很難說更多。