您的位置:首页 > 其它

一道微软MiniTest笔试题

2006-10-18 22:39 417 查看
题目描述:
1,一个文件中存有空格分开的单词
现在要将这个文件读入到另外一个文件,保存格式如下:
live evil
search casher
........
就是含有相同字母的单词要放到一行。
用c实现,可以使用fopen,fread,fwrite等
接口:
bool TransferDictionary(char * OriginalFile,char * NewFile);

我的解法:




/**//********************************************************


作者:Bring.Zhang 时间:2006.10


文件名:main.cpp


题目描述:


1,一个文件中存有空格分开的单词


现在要将这个文件读入到另外一个文件,保存格式如下:


live evil


search casher


........


就是含有相同字母的单词要放到一行。


用c实现,可以使用fopen,fread,fwrite等


接口:


bool TransferDictionary(char * OriginalFile,char * NewFile);


*******************************************************/


#include <stdio.h>


#include <stdlib.h>


#include <math.h>


#include <memory.h>


#include <string.h>




typedef struct word_tag//单词结点




...{


char* word;


struct word_tag* next;


// WordNode(){word=NULL; next=NULL;}


}WordNode;




typedef struct head_node_tag//链接的头结点




...{


WordNode* link;


struct head_node_tag* next;


int value;


int count;


// WordHeadNode(){link=NULL; next=NULL; value=0;count=0;}


}WordHeadNode;




WordHeadNode * start=NULL;




bool TransferDictionary(char* OriginalFile,char*NewFile);


char* ReadFile(const char* fname);


int GetValue(const char* word);


bool InsertNode(char* word);


void FreeSpace(WordHeadNode* start);




bool InsertNode(char* word)




...{


WordHeadNode *head,*pre,*pTmp;


WordNode * node,*npTmp;




int tmp;




pTmp = start;


if (start == NULL)




...{


head = (WordHeadNode*)malloc(sizeof(WordHeadNode));


//初始化


head->count = 0;


head->link = NULL;


head->next = NULL;


head->value = 0;




start = head;




node = (WordNode*)malloc(sizeof(WordNode));


//初始化


node->word = word;


node->next = NULL;




head->link = node;


head->count += 1;


head->value = GetValue(node->word);




return true;


}


else




...{


tmp = GetValue(word);


while (pTmp!=NULL && tmp!=pTmp->value)


//每次插入都要检索,当文件很大时效率大打折扣


//可以加个索引,加快检索速度




...{


pre = pTmp;


pTmp = pTmp->next;


}


if (pTmp == NULL)




...{


//该特征值不存在,头结点链表末尾插入


head = (WordHeadNode*)malloc(sizeof(WordHeadNode));


//初始化


head->count = 0;


head->link = NULL;


head->next = NULL;


head->value = 0;




pre->next = head;




node = (WordNode*)malloc(sizeof(WordNode));


node->next = NULL;


node->word = word;




head->link = node;


head->count += 1;


head->value = GetValue(node->word);


return true;


}




//特征值存在就在,单词链表末尾插入,链接头count加1


node = (WordNode*)malloc(sizeof(WordNode));


node->next = NULL;


node->word = word;




npTmp = pTmp->link;


pTmp->count += 1;




while (npTmp->next != NULL)


npTmp = npTmp->next;




if (npTmp == NULL)


return false;


npTmp->next = node;




return true;


}


}




char* ReadFile(const char* fname)




...{


FILE *fp;


fp = fopen(fname,"r");


if (fp == NULL)




...{


perror("Open file failed! ");


exit(0);


}




fseek(fp,0L,SEEK_END);


long fsize = ftell(fp);


if (fsize==0L)




...{


puts("The file is empty! ");


exit(0);


}


char *file_buf = (char*)malloc((size_t)fsize+1);


rewind(fp);




int Ret = fread(file_buf,sizeof(char),fsize,fp);




if (Ret == 0)




...{


return NULL;


}




file_buf[fsize] = '
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: