Skocz do zawartości

[c]tablica dwuwymiarowa typu char


rrysio6

Polecane posty

Coś mnie mój ćwiczeniowca wkręca i nie jestem pewien czy mówi prawdę...

 

Czy macierz zapisana w ten sposob:

 

char tyg[7][20]=

{

{"Poniedzialek"},

{"Wtorek"},

{"Sroda"},

{"Czwartek"},

{"Piatek"},

{"Sobota"},

{"Niedziela"}

};

 

to to samo jak to? (chodzi mi o zapisanie każdego wyrazu czy też każdej litery w inną komórkę):

 

char tyg[7][20]=

{

{'P','o','n','i','e','d','z','i','a','l','e','k'},

{'W','t','o','r','e','k'},

{'S','r','o','d','a'},

{'C','z','w','a','r','t','e','k'},

{'P','i','a','t','e','k'},

{'S','o','b','o','t','a'},

{'N','i','e','d','z','i','e','l','a'}

};

 

Jezeli jest tak jak gosc gadal to czy mozna zapisac tak:

tab[1]={"cokolwiek"}

chodzi o C++

Link do komentarza
Udostępnij na innych stronach

może źle sformuowałem pytanie :P

chodzi o to, że ja myślę, że:

char tyg[7][20]=

{

{"Poniedzialek"},

{"Wtorek"},

{"Sroda"},

{"Czwartek"},

{"Piatek"},

{"Sobota"},

{"Niedziela"}

};

 

jest to samo co to:

 

char tyg[7][20]=

{

{'P','o','n','i','e','d','z','i','a','l','e','k'},

{'W','t','o','r','e','k'},

{'S','r','o','d','a'},

{'C','z','w','a','r','t','e','k'},

{'P','i','a','t','e','k'},

{'S','o','b','o','t','a'},

{'N','i','e','d','z','i','e','l','a'}

};

a gość mi wkręca, że nie...

 

idąc dalej, poniższy kawałek kodu jest poprawny?

 

char tyg[7][20]=

{

{"Poniedzialek"},

{"Wtorek"},

{"Sroda"},

{"Czwartek"},

{"Piatek"},

{"Sobota"},

{"Niedziela"}

};

for (i=0; i<7; i++)

{ for (j=0; j<15; j++)

cout << tyg[j];

cout << endl; }

 

i wyświetli mi (zresztą i wyświetla bo sprawdzałem):

Poniedzialek

Wtorek

Sroda

Czwartek

Piatek

Sobota

Niedziela

 

Z tym, że gościu mówi, że mu druga pętla się nie podoba i że nadaremno robi te 15 kroków z tej pętli...

Link do komentarza
Udostępnij na innych stronach

może źle sformuowałem pytanie :P

chodzi o to, że ja myślę, że:

char tyg[7][20]=

{

{"Poniedzialek"},

{"Wtorek"},

{"Sroda"},

{"Czwartek"},

{"Piatek"},

{"Sobota"},

{"Niedziela"}

};

 

jest to samo co to:

 

char tyg[7][20]=

{

{'P','o','n','i','e','d','z','i','a','l','e','k'},

{'W','t','o','r','e','k'},

{'S','r','o','d','a'},

{'C','z','w','a','r','t','e','k'},

{'P','i','a','t','e','k'},

{'S','o','b','o','t','a'},

{'N','i','e','d','z','i','e','l','a'}

};

a gość mi wkręca, że nie...

 

idąc dalej, poniższy kawałek kodu jest poprawny?

 

char tyg[7][20]=

{

{"Poniedzialek"},

{"Wtorek"},

{"Sroda"},

{"Czwartek"},

{"Piatek"},

{"Sobota"},

{"Niedziela"}

};

for (i=0; i

{ for (j=0; j

cout

cout

 

i wyświetli mi (zresztą i wyświetla bo sprawdzałem):

Poniedzialek

Wtorek

Sroda

Czwartek

Piatek

Sobota

Niedziela

 

Z tym, że gościu mówi, że mu druga pętla się nie podoba i że nadaremno robi te 15 kroków z tej pętli...

No pewnie, że ta druga pętla jest niepotrzebna. Bo ta tablica 2-wymiarowa to tak jakby tablica stringów. Więc nie musisz po pojedynczych znakach iterować. W tym wypelnianiu tablicy pojedynczymi znakami nie podoba mi sie to, ze nie konczysz lancuchow znakiem 0. Nie jestem teraz przy kompie, żeby sprawdzić (komóra :) ).

Link do komentarza
Udostępnij na innych stronach

char tyg[7][20]=

{

{'P','o','n','i','e','d','z','i','a','l','e','k'},

{'W','t','o','r','e','k'},

{'S','r','o','d','a'},

{'C','z','w','a','r','t','e','k'},

{'P','i','a','t','e','k'},

{'S','o','b','o','t','a'},

{'N','i','e','d','z','i','e','l','a'}

};

KODchar tyg[7][20]=

{

{'P','o','n','i','e','d','z','i','a','l','e','k','\'},

{'W','t','o','r','e','k','\'},

{'S','r','o','d','a','\'},

{'C','z','w','a','r','t','e','k','\'},

{'P','i','a','t','e','k','\'},

{'S','o','b','o','t','a','\'},

{'N','i','e','d','z','i','e','l','a','\'}

};

KOD

for (i=0; i<7; i++)

cout<<tyg<<endl;

 

 

niewiem czemu, ale zera za ostatnimi backsleshami ucina.

"(2b || !(2b)) == question" W. Shakespeare

http://jakubniwa.pl - świat sztucznej inteligencji

Link do komentarza
Udostępnij na innych stronach

  • 1 month later...

 #include <iostream>
#include <string>

int main() {
   char two[] = {'W', 't', 'o', 'r', 'e', 'k'};
   // ups, na końcu wcale nie musi być '' - jeśli sami go nie dodamy!
   // np w trybie release akurat działało dobrze, ale w debug już wywalało śmieci
   char one[] = "Poniedzialek"; // na końcu string literal automatycznie dodawane jest ''
   std::cout << two << "nn";
   (void)one;

   std::cout << "string literals:n";
   char tyg[7][20] = {
       {"Poniedzialek"},
       {"Wtorek"},
       {"Sroda"},
       {"Czwartek"},
       {"Piatek"},
       {"Sobota"},
       {"Niedziela"}
   };

   for (int i = 0; i < 7; ++i) {
       for (int j = 0; j < 20; ++j) {
           if (tyg[i][j] != 0) {
               std::cout << tyg[i][j];
           } else {
               std::cout << '0';
           }
       }
       std::cout << "n";
   }

   std::cout << "char literals:n";

   char tyg2[7][20] ={
       {'P', 'o', 'n', 'i', 'e', 'd', 'z', 'i', 'a', 'l', 'e', 'k'},
       {'W', 't', 'o', 'r', 'e', 'k'},
       {'S', 'r', 'o', 'd', 'a'},
       {'C', 'z', 'w', 'a', 'r', 't', 'e', 'k'},
       {'P', 'i', 'a', 't', 'e', 'k'},
       {'S', 'o', 'b', 'o', 't', 'a'},
       {'N', 'i', 'e', 'd', 'z', 'i', 'e', 'l', 'a'}
   };

   for (int i = 0; i < 7; ++i) {
       for (int j = 0; j < 20; ++j) {
           if (tyg2[i][j] != 0) {
               std::cout << tyg2[i][j];
           } else {
               std::cout << '0';
           }
       }
       std::cout << "n";
   }

   return 0;
}

Ponieważ te tablice są statyczne, oraz inicjalizowane literałami, to reszta (tj brakujące znaki) wypełniane są zerami. O ile nazwy dni tygodni będą krótsze o jeden znak od długości tablicy, to wszystko będzie w porządku. wink.gif Pod tym względem obydwa zapisy dadzą ten sam wynik.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...