• hdu1075 What Are You Talking About


    这题目真的彻底无语了,因为一个小错误,检查了半天,就是一个累加变量被我重复用了

    悲剧呀,怪不得老是输出一些莫名其妙的东西

    整体的话,这应该也算是基础的字典树吧,,就是读入数据有些技巧,嘿嘿,不过好像可以用map做哦

    前面做过一道题,就是在一个串的末尾的节点处,标记一下,而这道题,在一个串的末尾处将该串对应 的英文插入

    #include<string.h>
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node
    {
    	node* next[26];
    	char str[10];
    }*tree,t;
    tree root;
    char art[1010];
    void insert(char *s1,char *s2)
    {
    	tree p=root,newnode;
    	for(;*s2!='\0';s2++)
    	{
    		int i=*s2-'a';
    		if(p->next[i]!=NULL)
    			p=p->next[i];
    		else 
    		{
    			newnode=(tree)malloc(sizeof(t));
    			for(int j=0;j<26;j++)
    		      newnode->next[j]=NULL;//就是这里,i跟j混用了,悲剧呀,查了好久都没查出来
    	        strcpy(newnode->str,"");
    			p->next[i]=newnode;
    			p=newnode;
    		}
    	}
    	strcpy(p->str,s1);
    }
    int find(char *s1)
    {
    	tree p=root;
    	for(;*s1!='\0';s1++)
    	{
    		int i=*s1-'a';
    		if(p->next[i]!=NULL)
    			p=p->next[i];
    		else return 0;
    	}
    	if(strcmp(p->str,"")!=0)//若在字典中,则输出
    	{
    			printf("%s",p->str);
    			return 1;
    	}
    	else return 0;
    }
    int main()
    {
    	int i,n;
    	char s1[10],s2[10],s[10];
    	root=(tree)malloc(sizeof(t));
    	for(i=0;i<26;i++)
    		root->next[i]=NULL;
    	strcpy(root->str,"");
    	gets(s);
    	while(scanf("%s %s",s1,s2)!=EOF)
    	{
    		if(strcmp(s1,"END")==0)
    			break;
    		insert(s1,s2);
    	}
    	getchar();
    	while(gets(art))
    	{
    		if(strcmp(art,"END")==0)
    			break;
    		char ss[15]="";
    		int k=0;
    		for(i=0;i<strlen(art);i++)//这一步读入很有技巧
    		{
    			if(!(art[i]<='z'&&art[i]>='a'))
    			{
    				ss[k]=0;//这里也蛮关键的,相当于将字符串末尾赋结束标志
    				int flag=find(ss);
    				if(!flag)//如果字典中查不到,则直接输出
    					printf("%s",ss);
    				k=0;//记得要重新赋值为0
    				printf("%c",art[i]);
    			}
    			else ss[k++]=art[i];//将除了标点符号之外的字母先单独保存,当遇到标点符号之类的就可以送入字典去查找了
    		}
    		printf("\n");
    	}
    	return 0;
    }
    
  • 相关阅读:
    CSP-201512
    SCC-Tarjan
    CSP-201509
    Codeforces Round #612 (Div. 2)/A/B/C/D
    CF-Hello 2020/A/B/C
    Anaconda介绍、安装及使用教程
    Linux 新手应该知道的 26 个命令
    Python编码规范:IF中的多行条件
    Python assert 断言函数
    数据结构常见的八大排序算法(详细整理)
  • 原文地址:https://www.cnblogs.com/nanke/p/2044833.html
Copyright © 2020-2023  润新知