数组值无法正确打印

时间:2017-03-26 09:07:13

标签: c++ arrays

This is the output i am getting when i run the code shown in this image.我编写了这段代码,用于在消除左递归后打印作品。我还将这些输出作品存储在" all"阵列。当我打印这个数组时,只有最后一行的值在初始行中用空行打印。如何解决这个问题?

#include<iostream>
#include<cstring>
using namespace std;
class production
{
    private:
        char lhs;
        char rhs[10][10],nr[10][10],rs[10][10],all[30][30];
        int noa,m;
    public:
        production()
        {
            noa=0;m=0;
            for(int i=0;i<30;i++)
            for(int j=0;j<30;j++)
            all[i][j]='\0';
        }
        void makeprod(char *str)
        {
            noa=0;
            for(int i=0;i<30;i++)
            for(int j=0;j<30;j++)
            rhs[i][j]='\0';         
            lhs=str[0];
            char r[20];
            strcpy(r,str+3);
            int j=0;
            for(int i=0;r[i]!='\0';i++)
            {
                if(r[i]!='/')
                rhs[noa][j++]=r[i];
                else
                {
                    rhs[noa++][j]='\0';
                    j=0;
                }
            }
            noa++;
        }
        void checks(string sr)
        {
            for(int i=0;i<30;i++)
            for(int j=0;j<30;j++)
            rs[i][j]=nr[i][j]='\0';     
            int ct=0,k=0,l=0;
            for(int i=0;i<noa;i++)
            {
                if(lhs==rhs[i][0])
                {
                    strcat(rhs[i],sr.c_str());
                    strcpy(rs[k],rhs[i]+1);
                    k++;
                }
                else
                {
                    strcpy(nr[l],rhs[i]);
                    strcat(nr[l],sr.c_str());
                    l++;
                }
            }
            if(l==noa)
            {
                cout<<lhs<<"->";
                for(int i=0;i<noa;i++)
                cout<<rhs[i]<<" ";
                cout<<"\n";
                all[m][0]=lhs;
                strcat(all[m],"->");
                for(int i=0;i<noa;i++)
                {
                    strcat(all[m],rhs[i]);
                    strcat(all[m],"/");
                }
                m++;
            }
            else
            {
                cout<<lhs<<"->";
                for(int i=0;i<l;i++)
                cout<<nr[i]<<" ";
                p.all[m][0]=lhs;
                strcat(all[m],"->");
                for(int i=0;i<l;i++)
                {
                    strcat(all[m],nr[i]);
                    strcat(all[m],"/");
                }
                m++;
                cout<<"\n"<<sr<<"->";
                for(int i=0;i<k;i++)
                cout<<rs[i]<<" ";
                cout<<" e\n";
                all[m][0]=lhs;
                strcat(all[m],"->");
                for(int i=0;i<k;i++)
                {
                    strcat(all[m],rs[i]);
                    strcat(all[m],"/");
                }
                m++;                                
            }
            cout<<"m= "<<m<<"\n";
            for(int i=0;i<m;i++)
            {
                for(int j=0;all[i][j]!='\0';j++)
                cout<<all[i][j];
                cout<<"\n";
            }
        }
        void display()
        {
            cout<<"m= "<<m<<"\n";
            for(int i=0;i<m;i++)
            {
                for(int j=0;all[i][j]!='\0';j++)
                cout<<all[i][j];
                cout<<"\n";
            }
        }
};
int main()
{
    production p;
    char str[20][20];
    string op[5]={"X","Y","Z","U","V"};
    cout<<"enter no of productions\n";
    int n,l=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"enter a production\n";
        cin>>str[i];
        p.makeprod(str[i]);
        p.checks(op[l++]);
    }
    p.display();
    return 0;
}

0 个答案:

没有答案