2017-08-31 43 views
-1
cin >> m; cin >> n; 

char grid[m][n]; 
cin >> grid[m][n]; 

2×2陣列的輸入線我想通過線路輸入字符陣列線,像C++通過線

ABCDE [輸入] FGHIJ [輸入] 。 。 。 等等最後得到mxn矩陣

我該怎麼做到這一點?

+2

'std :: vector '是你所需要的。不是這種非標準的東西。 – DeiDei

回答

0

只是一個想法:

#include <iostream> 
#include <cstdio> 
#include <vector> 

using namespace std; 

int main() 
{ 
    int m, n; 

    cin >> m; cin >> n; 

    vector< vector<char> > grid(n, vector<char>(m,'0')); 

    cout << "Reading "<< m << "x" << n << " Matrix..." << endl; 

    flush(cout); 

    for(int j=0 ; j<n ; j++) 
    {  
     for(int i=0 ; i<m ; i++) 
     { 
      grid[j][i] = getchar(); // TODO: Check if enter was pressed 
     } 
     cout << "Press Enter for next line"; 
     flush(cout); 
     cin.ignore(); 
    } 

    cout << "Result is:" << endl; 

    for(int j=0 ; j<n ; j++) 
    {  
     for(int i=0 ; i<m ; i++) 
     { 
      cout << grid[j][i]; 
     } 
     cout << endl; 
    } 

return 0; 
} 

我也比較喜歡菲利普Kočica字符串的方法,但也許這可以幫助,如果你想有一個定義的N×M大小的矩陣,然後輸入值。不知道這是你在找什麼...

+0

這是我正在尋找的人。非常感謝! –

+0

_「我想逐行輸入char數組」_這是char by char –

4

由於您使用的是,因此無需爲此使用char數組。

您可以結合使用std::stringstd::getline和一些容器,用於存儲這些字符串(std::vectorstd::dequestd::queue ...)。在你的情況下,我寧願只是std::vector

這種解決方案的巨大好處是,它的方式更容易使用和不易出錯比純字符數組。 STL容器分配&釋放他們自己的所有資源(RAII)和string調整爲輸入數據的大小。

下面是簡單的演示

#include <iostream> 
#include <vector> 

int main() 
{ 
    std::string str; 
    std::vector<std::string> grid; 

    // Read strings 
    while(std::getline(std::cin, str)) 
    { 
     // Store entered string to vector 
     grid.push_back(str); 
    } 

    // Loop through container 
    for (std::string& s : grid) 
    { 
     // Print strings 
     std::cout << s << std::endl; 
    } 

    return 0; 
} 
0

你可以做到這一點是這樣的:

const int m = 5; 
const int n = 4; 

char grid[m][n]; 

for(int i(0); i < m; i++){ 
    cin.getline(grid[i], n); 
    cin.sync(); 
} 

for(int i(0); i < m; i++) 
    cout << grid[i] << endl; 

cin.sync()在這裏很重要清除輸入緩衝區。

  • 另外它不安全,因爲如果用戶輸入的字符串不適合每行的大小。