Skocz do zawartości

Zarchiwizowany

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

rrysio6

[c]tablica dwuwymiarowa typu char

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

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

 

A nie szybciej to skompilowac i samemu sprawdzic?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

Udostępnij ten post


Link to postu
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...

Udostępnij ten post


Link to postu
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 :) ).

Udostępnij ten post


Link to postu
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.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
niewiem czemu, ale zera za ostatnimi backsleshami ucina.

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

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

×
×
  • Utwórz nowe...