Токенизация элементов и хранение их в n-арном дереве - PullRequest
0 голосов
/ 10 апреля 2019

Моя цель - токенизировать строки, используя разделитель '.' и затем сохраните их в форме n-арного дерева, с последовательными дочерними элементами, содержащими токенизированные элементы. У меня проблема с хранением элементов в массиве строк. И, следовательно, не в состоянии хранить их. Я также хочу спросить функционирование strtok() в C. Вот мой код

int main()
{   int opt,n;
    printf("Option,then number of cases:\n");
    scanf("%d %d",&opt,&n);

    node *root=createNode("root");

    char **words=arr_strings(size,n);

    char *dns_word=malloc(sizeof(char)*size);
    char *app=malloc(sizeof(char)*size);
    app[0]='.';
    char *dup=malloc(sizeof(char)*size);
    char *store=malloc(sizeof(char)*size);

    for(int i=0;i<n;i++)
        {printf("Word %d: ",i+1);
        scanf("%s",words[i]);
        *dup=*app;
        strcat(dup,words[i]);
        strcpy(words[i],dup);
        strcat(words[i],app);
        *store=*words[i];
        printf("Word %d:%s\n",i,words[i]);
        int j=0;
        dns_word=strtok(words[i],".");
        node *temp=createNode(dns_word);
        while(dns_word!=NULL){
            if(i==0)
                {//printf("Entered one child condition\n");
                if(j==0)
                    {root->child=temp;
                    }
                else
                    {
                    temp->child=createNode(dns_word);
                    temp->children++;
                    temp=temp->child;
                    }
                }
            else    
                {
                //printf("Entering else of inserting loop\n");
                //printf("dns_word:%s\n",dns_word);
                int t=root->children;
                node* copy=root->child;
                for(int j=1;j<root->children;j++)
                    {copy=copy->next;
                    }
                if(j==0)
                    {copy->next=temp;copy->children++;}
                else    
                    {
                    temp->child=createNode(dns_word);
                    temp->children++;
                    temp=temp->child;                   
                    }
                }
            dns_word=strtok(NULL,".");
            j++;
            }
        //printf("Word %d:%s\n",i,words[i]);
        root->children++;

        }   
    //Ignore this
    printf("Root,child:%s\n",root->child->word);
    printf("Root,child,next:%s\n",((root->child)->next)->word);
    //print(root->child);
    return 0;
}

Структура узла приведена здесь.

struct node{
    char *word;
    int children;
    struct node* child; 
    struct node* next;  
};
typedef struct node node;

Функция createNode выглядит следующим образом:

node* createNode(char *word)
    {
    node* new=malloc(sizeof(node));
    new->word=word;
    new->child=NULL;
    new->next=NULL;
    new->children=0;
    return new;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...