Jump to content
Sign in to follow this  
Amoguai

[Dúvida] Sintaxe C++

Recommended Posts

Amoguai

Boa tarde!

Aqui neste post o localhost apresenta o código para uma Trie.

Já andei pela net toda e não encontrei o significado para os parentesis rectos em struct Trie *children[MAX] e em , nem para o str[k] na condição do ciclo for em for ( int k = 0; str[k]; k++ ).

...

const int MAX = 255;

typedef struct Trie

{

        struct Trie *children[MAX];

        bool is_end;

} trie;

void init_node (trie *node)

{

        for ( int k = 0; k < MAX; k++ ) node->children[k] = NULL;

        node->is_end = false;

}

void add_word (char *str, trie *head)

{

        trie *walk = head;

        for ( int k = 0; str[k]; k++ )

        {

                if ( walk->children[str[k]] == NULL )

                {

                        walk->children[str[k]] = new trie;

                        init_node (walk->children[str[k]]);

                }

                walk = walk->children[str[k]];

        }

        walk->is_end = true;

}

...

Alguém me pode explicar o que fazem aqueles parêntesis rectos no pointer children e como é que str[k] pode ter mais do que um tipo de dados, boolean, null e trie?

Share this post


Link to post
Share on other sites
Baderous

struct Trie *children[MAX];

Isto declara um array de apontadores para Tries, de tamanho MAX, chamado "children".

for ( int k = 0; str[k]; k++ )

Este ciclo tem como condição de paragem str[k], que é o mesmo que dizer: strk[k]='\0' (porque se trata de uma string). Ou seja, vai iterando sobre o array str (os índices são dados pelo valor k), e termina quando atingir a posição no vector que possua o valor '\0'.

if ( walk->children[str[k]] == NULL )

Em str[k] existe um caracter, o qual possui um dado código ASCII (que é um inteiro). Como tal, pode ser utilizado como índice do array children.

Share this post


Link to post
Share on other sites
Baderous

Na verdade queria dizer que parava quando str[k] tinha o valor '\0', por isso era mais str[k]=='\0'.

Edit: mas o raciocínio é esse, fazer o ciclo enquanto str[k]!='\0'.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.