#include <stdio.h>
#include <stdlib.h>
#include <string.h>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
bool TransferDictionary(char * srcFile,char * destFile);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//从源文件中读入数据
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char* ReadFile(const char* fname);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//将处理后的数据写到目的文件中
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
bool WriteFile(const char* fname);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//得到一个word的hash码,实际就是返回word按字母排序后的字符串
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char* GetHashCode(char *word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//将word插入到表中正确的位置
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
bool InsertWord(char * word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//释放空间
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void Free();
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
struct Node
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char *word;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Node *next;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
};
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
struct HeadNode
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char* hashcode;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Node* child;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
HeadNode* link;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
};
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
HeadNode *gHeadList=NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void Free()
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
HeadNode *pHead=gHeadList,*pTmpHead=NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Node *pTmp=NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
while(NULL != pHead)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Node *pNode=pHead->child;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
while(NULL != pNode)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pTmp=pNode->next;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
free(pNode->word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
free(pNode);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pNode=pTmp;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pTmpHead=pHead->link;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
free(pHead->hashcode);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
free(pHead);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pHead=pTmpHead;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
bool WriteFile(const char* fname)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
FILE *fp=NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
fp = fopen(fname,"w");
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
HeadNode* hTmp = gHeadList;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Node *nTmp = NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
while (hTmp != NULL)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
nTmp = hTmp->child;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if(nTmp == NULL )continue;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
fwrite(nTmp->word,sizeof(char),strlen(nTmp->word),fp);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf("\n%s",nTmp->word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
nTmp=nTmp->next;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
while (nTmp!=NULL)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
fwrite(" ",sizeof(char),1,fp);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
fwrite(nTmp->word,sizeof(char),strlen(nTmp->word),fp);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf(" %s",nTmp->word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
nTmp = nTmp->next;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
fwrite("\n",sizeof(char),1,fp);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
hTmp = hTmp->link;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return true;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
bool InsertWord(char * word)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char *hashcode=GetHashCode(word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Node *pNode=(Node*)malloc(sizeof(Node));
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pNode->word=strdup(word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pNode->next=NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
HeadNode *pHead=gHeadList;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
while(pHead != NULL)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if(0 == strcmp(pHead->hashcode,hashcode))
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Node *pTmp=pHead->child;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pHead->child=pNode;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pNode->next=pTmp;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return true;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pHead=pHead->link;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pHead=(HeadNode*)malloc(sizeof(HeadNode));
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pHead->hashcode=strdup(hashcode);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pHead->child=pNode;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
pHead->link=gHeadList;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
gHeadList=pHead;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return true;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char* GetHashCode(char *word)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char value[26]={0};
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int len=strlen(word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if(len<=0)return NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char *hashcode=(char*)malloc(len+1);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int i=0;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
for(i=0;i<len;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
value[word[i]-'a']+=1;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int pos=-1;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
for(i=0;i<26;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
for(int j=0;j<value[i];j++)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
hashcode[++pos]='a'+i;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
hashcode[len]='\0';
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return hashcode;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char* ReadFile(const char* fname)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
FILE *fp = fopen(fname,"r");
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if (fp == NULL)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
perror("Open file failed!\n");
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
exit(0);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
fseek(fp,0L,SEEK_END);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
long fsize = ftell(fp);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if (fsize==0L)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
perror("The file is empty!\n");
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
exit(0);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char *file_buf = (char*)malloc((size_t)fsize+1);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
rewind(fp);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int Ret = fread(file_buf,sizeof(char),fsize,fp);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if (Ret == 0)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return NULL;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
file_buf[fsize] = '\0';
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return file_buf;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
bool TransferDictionary(char * OriginalFile,char * NewFile)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char * buf=ReadFile(OriginalFile);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if(buf == NULL)return false;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
const char *delimer=" ";
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char * word=strtok(buf,delimer);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
while(word != NULL)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf("Get a word:%s\n",word);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
InsertWord(strlwr(word));
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
word=strtok(NULL,delimer);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
WriteFile(NewFile);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return true;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int main()
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
char OriginalFile[100],TargetFile[100];
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
memset(OriginalFile,0,100);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
memset(TargetFile,0,100);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf("Enter the original file name:");
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
scanf("%s",OriginalFile);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf("Enter the target file name:");
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
scanf("%s",TargetFile);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
TransferDictionary(OriginalFile,TargetFile);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Free();
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return 0;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}