WRONG 字典树

WRONG 字典树
#include < stdio.h >
#include
< string .h >
#include
< ctype.h >
struct  TreeNode  // 结点
{
    
char  EN_word[ 25 ];
    TreeNode 
* next[ 26 ];
    TreeNode()
// 构造函数做初始化
    {
        EN_word[
0 ] = ' \0 ' ;
        
for ( int  i = 0 ;i < 26 ;i ++ ) next[i] = NULL;
    }
    
~ TreeNode() // 析构函数做善后工作
    {
        
for ( int  i = 0 ;i < 26 ;i ++ )
            
if (next[i] != NULL) delete next[i];
    }
};
void  insert(TreeNode  *& root, const   char   * EN_word, const   char   *  MA_word) // 插入结点
{
    TreeNode 
*  loca = root;
    
int  i = 0 ,ban = 0 ;
    
if (loca == NULL){loca  =   new  TreeNode();root = loca;}
    
int  len = strlen(MA_word);
    
while (MA_word[i])
    {
        ban
= MA_word[i] - ' a ' ;
        
if ( ! loca -> next[ban])
        {
            loca
-> next[ban] = new  TreeNode();
            
if (i == len - 1 ) // 判断是否最后一个字符,附加信息放在这里
                strcpy(loca -> next[ban] -> EN_word,EN_word);
        }
        i
++ ;
        loca
= loca -> next[ban];
    }
}
bool  search(TreeNode  *& root, const   char   *  MA_word)
{
    TreeNode 
*  loca = root;
    
int  i = 0 ,ban = 0 ;
    
char  ans[ 25 ];
    
int  len = strlen(MA_word);
    
if (MA_word[ 0 ==   '   ' return   0 ;
    
if (MA_word[ 0 ==   ' \n ' return   0 ;
    
while (MA_word[i])
    {
        ban
= MA_word[i] - ' a ' ;
        
if ( ! loca -> next[ban])
            
return   0 ;
        loca 
=  loca -> next[ban];
        i 
++ ;
    }

    strcpy(ans,loca
-> EN_word);
    
if (ans[ 0 ==   ' \0 ' return   0 ;
    printf(
" %s " ,ans);
    
return   1 ;
}
int  main()
{
    freopen(
" in.txt " , " r " ,stdin);
    
int  n,i;
    
char  c;
    
char  str1[ 25 ],str2[ 25 ];
    
struct  TreeNode  * headNode  =  NULL;
    
while ( true )
    {
        scanf(
" %s " ,str1);
        
if (strcmp(str1, " END " ) == 0 )   break ;
        
if (strcmp(str1, " START " ) == 0 continue ;
        scanf(
" %s " ,str2);
        insert(headNode,str1,str2);

    }
    getchar();
    gets(str2);
    i 
=   0 ;
    
while ( true )
    {
        c 
=  getchar();
        
if (c  == ' E ' break ;
        
/* while((c=getchar() ) && islower(c))
            str1[++i] = c;
*/
        
while ( 1 )// 只是这里在处理字符串的时候 样例过了 但是提交报内存错误
        {
            str1[i
++ =  c;
            c 
=  getchar();
            
if ( ! islower(c))
            {
                str1[i] 
=   ' \0 ' ;
                
break ;
            }
        }
        
if (search(headNode,str1) == 0 ) printf( " %s " ,str1);
        
if (c  !=   ' E ' )printf( " %c " ,c);
        
if (c  == ' E ' break ;
        i 
=   0 ;
        
    }
    
return   0 ;
}

下面的是正确的
#include < stdio.h >
#include
< string .h >
#include
< ctype.h >
struct  TreeNode  // 结点
{
    
char  EN_word[ 25 ];
    TreeNode 
* next[ 26 ];
    TreeNode()
// 构造函数做初始化
    {
        EN_word[
0 ] = ' \0 ' ;
        
for ( int  i = 0 ;i < 26 ;i ++ ) next[i] = NULL;
    }
    
~ TreeNode() // 析构函数做善后工作
    {
        
for ( int  i = 0 ;i < 26 ;i ++ )
            
if (next[i] != NULL) delete next[i];
    }
};
void  insert(TreeNode  *& root, const   char   * EN_word, const   char   *  MA_word) // 插入结点
{
    TreeNode 
*  loca = root;
    
int  i = 0 ,ban = 0 ;
    
if (loca == NULL){loca  =   new  TreeNode();root = loca;}
    
int  len = strlen(MA_word);
    
while (MA_word[i])
    {
        ban
= MA_word[i] - ' a ' ;
        
if ( ! loca -> next[ban])
        {
            loca
-> next[ban] = new  TreeNode();
            
if (i == len - 1 ) // 判断是否最后一个字符,附加信息放在这里
                strcpy(loca -> next[ban] -> EN_word,EN_word);
        }
        i
++ ;
        loca
= loca -> next[ban];
    }
}
bool  search(TreeNode  *& root, const   char   *  MA_word)
{
    TreeNode 
*  loca = root;
    
int  i = 0 ,ban = 0 ;
    
char  ans[ 25 ];
    
int  len = strlen(MA_word);
    
if (MA_word[ 0 ==   '   ' return   0 ;
    
if (MA_word[ 0 ==   ' \n ' return   0 ;
    
while (MA_word[i])
    {
        ban
= MA_word[i] - ' a ' ;
        
if ( ! loca -> next[ban])
            
return   0 ;
        loca 
=  loca -> next[ban];
        i 
++ ;
    }

    strcpy(ans,loca
-> EN_word);
    
if (ans[ 0 ==   ' \0 ' return   0 ;
    printf(
" %s " ,ans);
    
return   1 ;
}
int  main()
{
    freopen(
" in.txt " , " r " ,stdin);
    
int  n,i;
    
char  c;
    
char  str1[ 25 ],str2[ 25 ];
    
struct  TreeNode  * headNode  =  NULL;
    
while ( true )
    {
        scanf(
" %s " ,str1);
        
if (strcmp(str1, " END " ) == 0 )   break ;
        
if (strcmp(str1, " START " ) == 0 continue ;
        scanf(
" %s " ,str2);
        insert(headNode,str1,str2);

    }
    getchar();
    gets(str2);
    i 
=   0 ;
    
while ( true )
    {
        c 
=  getchar();
        
if (c  == ' E ' break ;
        
/* while((c=getchar() ) && islower(c))
            str1[++i] = c;
*/
        str1[i
++ =  c;
        
if (c  <   ' a '   ||  c  >   ' z ' )
        {
            str1[i
- 1 =   ' \0 ' ;
            
if (search(headNode,str1) == 0 ) printf( " %s " ,str1);
            
if (c  !=   ' E ' )printf( " %c " ,c);
            
             i 
=   0 ;
        }
        
        
// i++;
        
    }
    
return   0 ;
}

你可能感兴趣的:(WRONG 字典树)