标记元素并将其存储在n元树中

时间:2019-04-10 17:16:22

标签: c string

我的目标是使用定界符'对字符串进行标记。然后将它们以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;
}

0 个答案:

没有答案