c ++ 2x2数组逐行输入

时间:2017-08-31 10:33:08

标签: c++ arrays c++14

cin >> m; cin >> n;

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

我想逐行输入char数组,比如

abcde [enter] fghij [输入] 。 。 。 所以最终得到mxn矩阵

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:4)

由于您使用的是,因此无需为此目的使用char数组。

您可以将std::stringstd::getline和一些容器结合使用来存储这些字符串(std::vectorstd::dequestd::queue,...)。在你的情况下,我更喜欢std::vector

此解决方案的巨大优势在于,与纯char数组相比,更容易使用更不容易出错。 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;
}

答案 1 :(得分: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()在此处清除输入缓冲区非常重要。

  • 这也不安全,因为如果用户输入的字符串不符合每行的大小。

答案 2 :(得分: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;
}

我也更喜欢FilipKočica的字符串方法,但如果你想要一个NxM大小的定义矩阵然后输入值,这可能会有所帮助。不确定这是不是你想要的......