删除空格在C ++行的末尾

时间:2016-02-19 21:53:40

标签: c++ c++11

代码应该乘以两个矩阵并打印输出。它工作正常,除了它在每行的末尾打印一个额外的空间,并且在线提交服务不会接受它与该空间。任何帮助将不胜感激。

#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

1 个答案:

答案 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];
}