2017-04-04 71 views
-2

所以我有這個代碼讀取一個特定的文件,它分別具有值22和14,並且在同一行上。從文件讀取整數並初始化一個多維數組

int main() 
{ 
    int rows = 0; 
    int column = 0; 

    string line; 
    ifstream file("Path To File"); 
    if(file.is_open()){ 
      getline(file, line); 
      cout << line << endl; 
     file.close(); 
    } 
    else{ 
     cout << "File cannot be read." << endl; 
     cin.get(); 
     return 0; 
    } 
} 

如何創建一個多維數組,其大小是從文件中讀取的整數大小?

例如,如果該文件有22和10,行應該= 22個列應該= 10。

回答

0

假設輸入文件只包含由空格分隔的ROW和COL值,可以使用字符串流至將一行中的一行一次流到一個int。

int rows, column; 
std::string line; 
std::ifstream file("Path To File"); 
if(file.is_open()){ 
    std::getline(file, line); 
    std::cout << line << std::endl; 
    std::stringstream(line) >> rows >> column; 
    file.close(); 
} 
int matrix[ rows][ column ]; 

編輯使用std :: stringstream的,而不是爲std :: Stoi旅館

+0

我需要#include東西才能使用std :: stoi嗎? – Lithorz

+0

stoi是在C++ 11中引入的。如果你的編譯器不支持使用std :: atoi(word.c_str()) – jla

+0

mmm,那很奇怪。如果我使用它說:「錯誤:'stoi'未在此範圍上聲明」或「錯誤:'atoi'未在此範圍內聲明」 – Lithorz

0

開始用蠻力和優化性能的要求。

Loop while std::getline can read a line from the file 
    Write the line into a std::stringstream. 
    Make an empty std::vector. 
    Loop while >> can read a token from the std::stringstream 
     Push the token into the std::vector. 
    Push the std::vector into a std::vector of std::vectors. 

如果矩陣太短,您可能必須在矩陣中填充零的行。