Tablica słów, macierz znaków

0

Witam mam do zrobienia następujące zadanie:

title

Na podstawie takiego przykładu tworzenia tablicy tablic:

title

No i nie za bardzo wiem jak się za to zabrać - przecież każdy string już w sam sobie jest tablicą, więc wystarczy po prostu stworzyć tablicę stringów? Zrobiłem to w ten sposób:

#include <iostream>

using namespace std;

int main()
{
    int ilosc;
    cout << "Enter a number of words:";
    cin >> ilosc;

    string *tab;
    tab = new string[ilosc];

    for (int i=0;i<ilosc;i++)
        cin >> tab[i];
    for (int i=0;i<ilosc;i++)
        cout << tab[i] << endl;

    return 0;
}

Czy może robi się to inaczej bądź źle rozumiem zadanie? Z góry dziękuje za pomoc.

1

Według mnie to co podałeś wyżej jest OK. Może chodzi o to abyś nie używał stringów tylko tablicę char?

1

W zadaniu jest napisane aby utworzyć macierz znaków. Wydaje mi się że musisz skorzystać z char**. Zgadzało by z przykładem (tworzenie wymiarowych tablic dynamicznych). String nie jest do końca tablicą, raczej pasuje tu określenie obiekt.

0

A w jaki sposób to zrobić za pomocą chara? Przecież char to pojedynczy znak, więc słowo musiałoby być chyba całym wierszem poszczególnej macierzy np.

| S L O W O|
| W Y R A Z|

A wtedy nie wiemy ile kolumn ma mieć nasza utworzona macierz, tak by w wierszu zmieścił się najdluzszy wyraz jaki zażyczy sobie użytkownik - w zadaniu podajemy tylko ilosc slow

1

Masz tablicę znaków dla każdego wyrazu. (Czyli wskaźnik na 1 element tablicy)
Tworzysz więc tablicę wskaźników aby trzymać w niej wskaźniki na tablice.

1

W tej chwili na myśl przychodzi mi stworzenie tablicy przejściowej o stałym rozmiarze (i przy okazji o maksymalnej długości słowa),
gdzie zliczasz znaki nie będące " " i przepisujesz do właściwej tablicy;

0

Chodzi o coś takiego?:

#include <iostream>

using namespace std;

int main()
{
    int ilosc;
    cout << "Enter a number of words:";
    cin >> ilosc;

    char **tab;
    tab = new char*[ilosc];

    for (int i=0;i<ilosc;i++)
        tab[i]= new char[99];


    for (int i=0;i<ilosc;i++)
        cin>> tab[i];

    for (int i=0;i<ilosc;i++)
        cout <<  tab[i];
    return 0;
}
}

Jeśli tak - to wciąż pozostaje kwestia tego, że tego 99 nie powinno tam być - da się to jakoś obejść? Bo nie mam pomysłu, tymbardziej, że najpierw mają zostać stworzone wszystkie tablice, a dopiero później wpisujemy słowa - nie da się więc "w biegu" wyłapać długości poszczególnych słów i na ich podstawie ustalić wielkość danej tablicy znaków.

1

Chodziło mi raczej o taką konstrukcje:

#include <iostream>
 
using namespace std;
 
int main()
{
    const unsignd int MAX = 100;
    unisgned int size = 0;
    char word[MAX];
    
    
    /*
        Wprowadzanie ilości słów i tworzenie char**
    */
    
    for(unsigned int i = 0; i < ilosc; ++i)
    {
        /*
            Wprowadzasz słowo do tablicy word
        */
        
        /*
            Zliczasz znaki 
        */
        
        tab[i] = new char[size];
        
        /*
            Przepisujesz tablice word do tab[i]
        */
    }
    
    return 0;
}

Myślę że zliczanie znaków i przypisanie znaków do tablicy word można spokojnie wykonać w jednej pętli.

0

Pisząc posta napisałeś posta i go nie zauważyłem, dlatego odpowiadałem do @atmal

Wielkie dzięki ;) Zrobię to w ten sposób :D

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