一道微软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] = '
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] = '
相关文章推荐
- 一道微软的Mini-Test笔试题 解决方法。
- 一道微软的Mini-Test笔试题(一)
- 一道微软的Mini-Test笔试题(二)
- C语言测试题目解答:微软一道笔试题,2005年华为招聘
- 微软的一道笔试编程试题
- 微软最新的一道笔试题,我觉的出的不好,要改的地方太多了
- 一道微软笔试题
- 学习笔记IV——2012 Microsoft Intern Hiring Written Test (2012微软实习生招聘笔试题)
- 微软一道笔试题目
- 送上今年微软的一道笔试题
- 一道微软笔试题
- 一道微软笔试题
- 一道微软笔试题,算法才是王道
- 微软的一道C语言笔试题(转)
- 数位DP--由一道微软笔试题引起
- 赴微软测试工程师必考一道笔试题目
- 一道微软笔试题: 4个袋子,15个球,每个袋子至少放一个球,而且袋子中的球数量不能重复,有多少种方式
- 一道网上找的微软笔试题
- 送上今年微软的一道笔试题