Problem ze tablicami wskaźników

2011-12-05 15:21
Sprawov
0

Mam takie zadanie:

Napisz funkcję, która zarezerwuje 10 elementową tablicę, a jej adres przekaże wskaźnikowi o nazwie linijka. Ma to być tablica, w której można przechowywać wskaźniki do tablic znaków.
Następnie za pomocą pętli for dla każdego z 10 elementów tej tablicy linijka:
-zarezerwuj operatorem new tablicę 80 znaków;
-jej adres wpisz do kolejnego elementu tablicy linijka;
-w tej 80 znakowej tablicy znaków umieść C-string "To jest linijka nr n" - gdzie n jest kolejnym numerem linijki (od 0 do 9).
Po zrobieniu tego wobec wszystkich 10 elementów tablicy linijka, za pomocą pętli for wypisz na ekranie kolejno zawartość tych C-stringow.
W tablicy wskaźników linijka dokonaj takiej zmiany, by zamienić zawartość elementu 3 z 6.
Za pomocą takiej samej jak poprzednio pętli for wypisz na ekranie naszych 10 C-stringow.
Zlikwiduj wszystkie rezerwowane operatorem new obiekty.

/Symfonia C++ Standard Jerzy Grębosz

Będę wdzięczny za każda podpowiedź.

Kod, który udało mi się napisać:

#include <iostream>
using namespace std;
void jakas_funkcja();
int main()
{
jakas_funkcja();
}

void jakas_funkcja()
{
    char *linijka[10];
    char *wsk;

    for(int i = 0; i < 10; i++)
        {
            wsk = new char[80];
            linijka[i] = wsk;
            wsk[i] = "To jest linijka nr: ";
            cout << *wsk;

        }

}

No niestety ostro się przejechałem na tym zadaniu..pomożecie?

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-12-05 16:14
0
#include <iostream>
using namespace std;

//Napisz funkcję, 
void fun()
{
//która zarezerwuje 10 elementową tablicę, (Ma to być tablica, w której można przechowywać wskaźniki do tablic znaków.)
     char* tablica[10];
//a jej adres przekaże wskaźnikowi o nazwie linijka.
     char** linijka = tablica;

//Następnie za pomocą pętli for dla każdego z 10 elementów tej tablicy linijka: 
     for(int i = 0; i < 10; ++i)
     {
// -zarezerwuj operatorem new tablicę 80 znaków;
          char* temp = new char[80];
// -jej adres wpisz do kolejnego elementu tablicy linijka;
          *(linijka + i) = temp;
// -w tej 80 znakowej tablicy znaków umieść C-string "To jest linijka nr n" - gdzie n jest kolejnym numerem linijki (od 0 do 9).
          strcpy(temp, "To jest linijka nr: ");
          int dlugosc = strlen(temp);
          temp[dlugosc++] = i + '0';
          temp[dlugosc] = '\0';
     }
//Po zrobieniu tego wobec wszystkich 10 elementów tablicy linijka, za pomocą pętli for wypisz na ekranie kolejno zawartość tych C-stringow.
     for(int i = 0; i < 10; ++i)
         cout << tablica[i] << endl;

     cout << endl;
//W tablicy wskaźników linijka dokonaj takiej zmiany, by zamienić zawartość elementu 3 z 6.
     char* temp = linijka[2];
     *(linijka + 2) = *(linijka + 5);
     linijka[5] = temp;
//Za pomocą takiej samej jak poprzednio pętli for wypisz na ekranie naszych 10 C-stringow.
     for(int i = 0; i < 10; ++i)
         cout << linijka[i] << endl;
//Zlikwiduj wszystkie rezerwowane operatorem new obiekty.
     for(int i = 0; i < 10; ++i)
         delete [] linijka[i];
}

int main()
{
    fun();
    getchar();
    return 0;
}

Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)
edytowany 1x, ostatnio: MJay, 2011-12-05 17:45
Hmm. Z tego co wiem to w symfonii nie ma wspomniane o czymś takim jak: char** albo funkcja strlen.. sam bym się nie domyślił, że to tak trzeba zrobić. No chyba, że autor zakłada, iż ktoś do funkcji bibliotecznych zajrzy? - Dr Zielu 2011-12-05 16:21
Nie ma nic wspomnianego na temat wskaźników do tablic znaków? Przecież to jest nawet w treści zadania, jak masz książkę przy sobie to zajrzyj na stronę 287. Nie ma nic o strlen? Ok, ale jest o strcat. strcat dochodzi do znaku null, czyli to co ja zrobiłem za pomocą strlen i dokleja tam C-stringa kończąc znakiem null, który ja także dodałem. - MJay 2011-12-05 16:33
Ok, ale o char** nic nie ma albo jestem ślepy. Chodzi mi o te dwie gwiazdki...dlaczego dwie? Pisze to w Symfonii? Nie widzę.. - Dr Zielu 2011-12-05 19:50
Autor wymaga w zadaniu czegoś o czym nie wspomniał.. - Dr Zielu 2011-12-05 19:50
Jak przesyłasz tablicę dwuwymiarową do funkcji, main, to wpisujesz main(int argc, char* tab[]) lub main(int argc, char** tab), a on pokazuje tam takie coś. Z tego co pamiętam było gdzieś tam o wskaźnikach wyższego rzędu - MJay 2011-12-05 20:26

Pozostało 580 znaków

2011-12-05 16:16
Sprawov
0

Dzięki :)

Pozostało 580 znaków

2011-12-05 16:32
0

Słodki Swarogu,CO to ma być MJay?!

@Spawov
Wystarczy ino to w ciele maina:


const char *text="To jest linijka nr:";
char **linijka=new char*[10];

//stworzenie i wypełnienie tekstem
for(int cnt=0;cnt<10;cnt++)
{
    linijka[cnt]=new char[80];//+2 na cyfrę
    strcpy(linijka[cnt],text);
    itoa(cnt+1,linijka[cnt]+strlen(text),10);    
}

//wyświetlenie
for(int cnt=0;cnt<10;cnt++) printf("%s\n",linijka[cnt]);

//zamiana 3 z 6
char *tmp=linijka[2];
linijka[2]=linijka[5];
linijka[5]=tmp;

//wyświetlenie
for(int cnt=0;cnt<10;cnt++) printf("%s\n",linijka[cnt]);

for(int cnt=0;cnt<10;cnt++) delete[] linijka[cnt];
delete[] linijka;

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 6x, ostatnio: MasterBLB, 2011-12-05 17:14
Czytałeś co masz robić pokolei? Nie wykonałeś praktycznie nic z polecenia. Przejdź polecenie linijka po linijce i popraw swój kod, - MJay 2011-12-05 16:36
Hm racja,za bardzo zasugerowałem się istniejącym kodem autora.No,ale teraz już robi wszystko co miało być - MasterBLB 2011-12-05 17:15
Ty masz 18 linii, ja 21. Niewielka różnica ;] - MJay 2011-12-05 17:46

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0