用户将矩阵定义为 Matlab 的方式如下:
>> matrix = [1 2 3;4 5 6;7 8 9;10 11 12]
相当于this。
我的目标是将上面的语法转换为规范的C ++矩阵。
我解决这个问题的方法是将字符串(matlab形式的矩阵)作为输入,将其转换为char数组,然后剥离空格和括号,同时将不用空格分隔的数字放在一起。换句话说,像this这样的东西。然而,这一步是我发现很多困难的地方。
我的代码:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
string imatrix;
int n = 0;
cout<<"Matrix: ";
getline(cin,imatrix);
const int dim = imatrix.length();
char im[dim];
for(int i=0; i<dim; i++)
im[i]=imatrix.at(i);
int rows = 1;
int col = 0;
for(int j=0; j<dim; j++)
{
if(im[j] == ';')
rows += 1;
if(im[j] != '[' && im[j] != ' ' && rows == 1 )
col += 1;
}
int matrix[rows][col];
int strip[rows*col];
int temp;
/*
This is the part were I am stuck. I need to somehow create the strip
array.
I tried this:
for(int m = 0; m<dim; i++)
{
if(im[m]=='[' || im[m] == ' ' || im[m] == ';')
continue;
else
{
temp = im[m]; //temporarily save the digit just found
//Checking if there are numbers on positions after the one found
for(int t = m; t<dim, t++)
{
if(im[t]!='[' && im[m] != ' ' || im[t] != ';')
{
//Somehow save the digits found
}
else
{
//Somehow save temp followed by the digits found, into position (i) in the array strip.
index = t;
break;
}
}
}
//Somehow make the loop begin from index
}
*/
for(int k=0; k<rows; k++)
{
for(int s=0; s<col; s++)
{
matrix[k][s] = strip[n];
n += 1;
}
}
system("PAUSE");
}
我想补充说我是初学者,我试图用'beginner-methods'来解决这个问题。
附录:
如果您查看上面的代码,评论的部分就是我遇到问题的部分。换句话说,创建'strip array'。
答案 0 :(得分:0)
首先,在维度解析部分,有一个轻微的错误,它为每个数字增加一列,所以如果你的矩阵在第一行有多个数字条目,它可能会出错。
从数字处理部分开始,由于从左到右读取数字,因此可以使用
temp=temp*10+(im[i]-'0');
你的解析字符是空格或;所以当我读取它时,我会把它们前面读过的数字保存到空间中,就像这样。
strip_idx=0;
if(im[m] == ' ' || im[m] == ';')
{
strip[strip_idx]=temp;
strip_idx++;
}
请注意,即使在这些之后,代码仍然非常容易出现输入错误,例如在数字之间有2个空格等。