2017-08-31 41 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()在这里很重要清除输入缓冲区。

  • 另外它不安全,因为如果用户输入的字符串不适合每行的大小。