我正在研究一个使用STL向量创建矩阵类的代码。我希望用户输入(在控制台上)为:
1 2 3
4 5 6
或
1 2 3
4 5 6
7 8 9
就是这样,没有别的。即代码应该能够从输入本身获取行数和列数(而不是明确询问用户)。
有人可以指导我吗?
答案 0 :(得分:0)
我会一次读取一行输入行,直到一行为空。
#include<iostream>
#include<string>
using namespace std;
int main(){
string s,s1;
do{
getline (std::cin, s);
s1+=s;
}while(s.length()>0);
cout<<s1;
return 0;
}
不是添加到s1,而是需要编写一个简单的函数来将字符串s拆分为数字,在第一步存储列数,测试列数是否发生变化(抛出错误),增加每一步的行数,当然,将矩阵的元素存储在一个向量中。完成后,您可以构建矩阵
答案 1 :(得分:0)
好的..我找到了办法。谢谢Andrei .. 我是这样做的..
#include<iostream>
#include<vector>
#include<string>
#include <sstream>
#include <iterator>
using namespace std;
int main() {
vector <vector <double> > v;
string s;
int count=0, ncol=0,check=0,nrow=0;
while(1) {
getline(cin,s);
if (s.length() == 0)
break;
for (int i=0; i<s.length(); i++)
if (s[i]==' ')
count++;
count++;
if (check==0) {
check++;
ncol=count;
}
if (count != ncol) {
cout << "ncol should be same in each row!" <<endl;
break;
}
v.resize(nrow+1);
istringstream buf(s);
istream_iterator<string> beg(buf), end;
vector<string> dummy(beg, end);
for (int i=0; i<ncol;i++)
v[nrow].push_back(stod(dummy[i]));
nrow++;
count=0;
}
//print the vector 'v' here
}