problem with 2D char array

Please tell me what's wrong with the initialization of this 2D char array a[10][2];
I've tried with curly brackets too, but nothing happends. With round brackets, ASCII values get stored;

#include<iostream>
#include<conio.h>
#include<string.h>

using namespace std;

class loj
{
     
              char a[10][2];
              string s;
              char b[2];
              int j;
             
      public:
             void input();
             void logic();
             loj();
};
loj::loj()
{
          a[10][2]=(
                    ('n','o'),
                    ('p','a'),
                    ('r','e'),
                    ('c','i'),
                    ('v','o'),
                    ('m','u'),
                    ('x','a'),
                    ('z','e'),
                    ('b','i'),
                    ('s','o')
                   );
                   //to test the value of a[10][2];
          for(int i=0;i<2;i++)
                  for(int j=0;i<10;j++)
                          cout<<a[i][j];
          j=0;
}
void loj::input()
{
     cout<<"enter a lojo string\n";
     cin>>s;
     cout<<"sd";

}
void loj::logic()
{
     cout<<s;
     for(int i=0;i<s.length();i++)
     {
          while(j<=1)
          {
                     
                      b[j]=s[i];
                      j++;
          }
          if(j==2){
                   
                      for(int k=0;k<=9;k++)
                      {
                              if((b[0]==a[0][k])&&(b[1]==a[0][k]))
                              {
                                                                  cout<<i<<"\t";
                              }
                      }
                      j=0;
            }
     }
}
     
int main()
{
    loj l;
    l.input();
    l.logic();
    getche();
}
shilpi84Asked:
Who is Participating?
 
jkrCommented:
Actually, you cannot initalize a member that way. However,

loj::loj()
{
          char b[10][2]={
                    {'n','o'},
                    {'p','a'},
                    {'r','e'},
                    {'c','i'},
                    {'v','o'},
                    {'m','u'},
                    {'x','a'},
                    {'z','e'},
                    {'b','i'},
                    {'s','o'}
                   };
          memcpy(a,b,sizeof(a));
                   //to test the value of a[10][2];
          for(int i=0;i<10;i++)
                  for(int j=0;i<2;j++)
                          cout<<a[i][j] << endl;
          j=0;
}

should work. Note that the end indices for i and j in the loop were apparently swapped.
0
 
shilpi84Author Commented:
thanks jkr... it works now... but why couldn't this work directly without using b and then copying

a[10][2]={
                    {'n','o'},
                    {'p','a'},
                    {'r','e'},
                    {'c','i'},
                    {'v','o'},
                    {'m','u'},
                    {'x','a'},
                    {'z','e'},
                    {'b','i'},
                    {'s','o'}
                   };
0
 
jkrCommented:
Because using 'a[10][2] = ...' means that you are trying to assing a value to an array *element*, not initializaing an array - the notation 'a[10][2]' even writes over the array bounds, since 'a[9][1]' are th ehighest allowed indices.
0
 
shilpi84Author Commented:
thanks jkr you  cleared my doubts
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.