Jump to content

Archived

This topic is now archived and is closed to further replies.

rrysio6

[c]tablica dwuwymiarowa typu char

Recommended Posts

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++

Share this post


Link to post
Share on other sites

Tablica to wskaznik, a ze poprawne jest char* s = "tekst", wiec tamto tez powinno byc poprawne.

 

A nie szybciej to skompilowac i samemu sprawdzic?

Share this post


Link to post
Share on other sites

czyli można np te dni tygodnia zapisać do tablicy jednowymiarowej tak, żeby potem przez for'a wyświetlić któryś dzień tygodnia?

Share this post


Link to post
Share on other sites

jedno wymiarowa nie, chyba ze tablica wskaznikow. A najlepszym rozwiazaniem chyba jest sprintf.

Share this post


Link to post
Share on other sites

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...

Share this post


Link to post
Share on other sites

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 :) ).

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
niewiem czemu, ale zera za ostatnimi backsleshami ucina.

Czyżby nasze forum nie używało funkcji add slashes i strip slashes :D ?

Share this post


Link to post
Share on other sites

 #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.

Share this post


Link to post
Share on other sites

×
×
  • Create New...