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