代码应该乘以两个矩阵并打印输出。它工作正常,除了它在每行的末尾打印一个额外的空间,并且在线提交服务不会接受它与该空间。任何帮助将不胜感激。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void matrixMultiply(int A[][10],int m,int n,int B[][10],int p,int q)
{
int sum=0;
int **product ;
product = new int*[m];
for(int i=0;i<q;i++)
product[i] = new int[q];
if(n!=p)
{
cout<<"The two matrices have incompatible dimensions."<<endl;
return;
}
cout<<"The product is:\n";
for(int i=0;i<m;i++)
{
for(int j=0;j<q;j++)
{
for(int k=0;k<p;k++)
{
sum+=A[i][k]*B[k][j];
}
product[i][j]=sum;
sum=0;
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<q;j++)
cout<<product[i][j]<<" "; //This is where the problem is
cout<<endl;
}
}
int main()
{
int m=0,n=0;
int p=0,q=0;
int A[10][10];
int B[10][10];
string val1, val2;
string m1=" ",m2=" ";
string choice = "y";
cout<<"Enter first matrix:"<<endl;
do
{
getline(cin, m1);
if(m1.compare("")==0)
break;
stringstream ss(m1);
n=0;
while(ss>>val1)
{
A[m][n]=stoi(val1);
n++;
}
m++;
}while(cin.peek());
cout<<"Enter second matrix:"<<endl;
do
{
getline(cin, m2);
if(m2.compare("")==0)
break;
stringstream ss(m2);
q = 0;
while(ss>>val2)
{
B[p][q]=stoi(val2);
q++;
}
p++;
}while(cin.peek());
matrixMultiply(A,m,n,B,p,q);
return 0;
}
示例
Enter first matrix:
1 2 3
4 5 6
Enter second matrix:
7 8
9 0
1 2
The product is:
28 14 <- extra space
79 44 <- extra space
答案 0 :(得分:4)
首先,让我们添加一些缺失的大括号,因为endl
显然与循环无关:
for(int i=0;i<m;i++)
{
for(int j=0;j<q;j++)
{
cout << product[i][j] << " "; //This is where the problem is
}
cout << endl;
}
进入的好习惯。无论如何,如果问题是尾随空间只是改变你的逻辑。而不是总是在每个元素之后打印一个空格 - 在每个元素之前打印一个,所以内部循环变为:
for (int j=0; j<q; ++j) {
cout << ' ' << product[i][j];
}
现在我们只需要处理额外的领先空间......这很容易,不要在第一个元素上打印空格:
for (int j=0; j<q; ++j) {
if (j) {
cout << ' ';
}
cout << product[i][j];
}