Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak uproscic iterowanie po tablicy statycznej?

Ostatnio zmodyfikowano 2017-08-09 09:15
Autor Wiadomość
pekfos
» 2017-08-06 16:23:20
Zastanawiam się jeszcze czy na końcu każdej tablicy dodać 0 lub NULL?
To jedno z możliwych rozwiązań twojego problemu. Nie ma po co tego robić, jeśli problem rozwiążesz w inny sposób.
P-163863
Monika90
» 2017-08-06 17:00:39

Dzięki Monika90 za kod. Nie wpadłbym na takie rozwiązanie.
Istnieją nawet biblioteki które to implementują https://github.com/Microsoft​/GSL
C/C++
#include <iostream>
#include <gsl/span>

const char * tab1[] = { "Piotr", "Pawel" };
const char * tab2[] = { "Tomasz", "Andrzej" };
const char * tab3[] = { "Szymon" };
const char * tab4[] = { "Mateusz" };
const char * tab5[] = { "Marek", "Jakub", "Lukasz" };
gsl::span < const char *> tab[] = { tab1, tab2, tab3, tab4, tab5 };

int main()
{
    for( auto & a: tab )
    {
        for( auto & name: a )
             std::cout << name << ' ';
       
        std::cout << '\n';
    }
}
P-163864
nanoant20
Temat założony przez niniejszego użytkownika
» 2017-08-06 18:24:15
Monika90 jeszcze raz dziękuję za pokazanie rozwiązania.
Ale i tak postaram się rozwiązać to moje zadanie,
odnosząc się do instrukcji (pouczenia) pekfos'a.
Muszę uzupełnić ten mój brak wiedzy.

P.S.
pekfos poprawiłem tego for'a
C/C++
//Code::Blocks Wersja #:16.01! mingw32-gcc System#: Windows XP 32bit
#include <iostream>
#include <cstring>

using namespace std;

const char * tab1[] = { "Piotr", "Pawel" };
const char * tab2[] = { "Tomasz", "Andrzej" };
const char * tab3[] = { "Szymon" };
const char * tab4[] = { "Mateusz" };
const char * tab5[] = { "Marek", "Jakub", "Lukasz" };
const char * tab[] = { * tab1, * tab2, * tab3, * tab4, * tab5 };

int main()
{
   
    for( unsigned int i = 0; i < sizeof tab / sizeof tab[ 0 ]; i++ )
    {
        for( unsigned int j = 0; j < sizeof tab; j++ )
        {
            cout << tab[ i ][ j ] << " ";
           
        }
        cout << endl;
    }
   
   
    return 0;
}

Ale dalej sypią się śmieci z pamięci.
P-163865
jankowalski25
» 2017-08-08 16:46:04
j < sizeof tab
Przekraczasz indeks tablicy.
P-163879
pekfos
» 2017-08-08 17:34:51
C/C++
sizeof tab
Gdzie sens? To rozmiar w bajtach i innej tablicy niż potrzeba. Dla danego i potrzebujesz rozmiaru tablicy pod tab[i]. W zależności od konkretnego i rozmiary będą różne, wiec biorąc pod uwagę to, że wartość zmiennej nigdy nie wpłynie na wynik sizeof, żaden sizeof ci nie poda tu poprawnego rozmiaru.
P-163880
nanoant20
Temat założony przez niniejszego użytkownika
» 2017-08-08 22:34:26
rozumiem, że powinienem zrobić coś takiego
strlen( tab[ i ] )

P-163885
pekfos
» 2017-08-08 22:40:21
I jaki to dało efekt?
P-163886
nanoant20
Temat założony przez niniejszego użytkownika
» 2017-08-09 09:15:14
Wyświetla wszystkie elementy z tablcy tab[]
C/C++
//Code::Blocks Wersja #:16.01! mingw32-gcc System#: Windows XP 32bit
#include <iostream>
#include <cstring>

using namespace std;

const char * tab1[] = { "Piotr", "Pawel" };
const char * tab2[] = { "Tomasz", "Andrzej" };
const char * tab3[] = { "Szymon" };
const char * tab4[] = { "Mateusz" };
const char * tab5[] = { "Marek", "Jakub", "Lukasz" };
const char * tab[] = { * tab1, * tab2, * tab3, * tab4, * tab5 };

int main()
{
    for( unsigned int i = 0; i < sizeof tab / sizeof tab[ 0 ]; i++ )
    {
        for( unsigned int j = 0; j < strlen( tab[ i ] ); j++ )
        {
            cout << tab[ i ][ j ] << " ";
        }
        cout << endl;
    }
    return 0;
}
P-163887
1 « 2 »
Poprzednia strona Strona 2 z 2