cin >> m; cin >> n;
char grid[m][n];
cin >> grid[m][n];
我想逐行输入char数组,比如
abcde [enter] fghij [输入] 。 。 。 所以最终得到mxn矩阵
我怎样才能做到这一点?
答案 0 :(得分:4)
由于您使用的是c++,因此无需为此目的使用char数组。
您可以将std::string
与std::getline
和一些容器结合使用来存储这些字符串(std::vector
,std::deque
,std::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大小的定义矩阵然后输入值,这可能会有所帮助。不确定这是不是你想要的......