成语大全网 - 经典成语 - 编写一个词典

编写一个词典

其中,涉及到文件的读写,这里给出包含的头文件和主要的方法:

#include <fstream.h>

#include <string.h>

#include <iostream.h>

//读文件用到的方法

fstream file;

file.open("data.txt",ios::in);//以读方式打开文件data.txt

file.eof() 判断文件是否读完

file.getline(char *line, int n)

getline方法用于从文件里读取一行字符。其中,第一个参数line是一个指向字符串的字符指针或存放字符串的字符数组,n表示本次读取的最大字符个数。

//写文件用到的方法

file.open("data.txt",ios::out);//以写方式打开文件data.txt

file.write(char *line, int n)

write方法用于向文件写一行字符。其中,第一个参数line是一个指向字符串的字符指针或存放字符串的字符数组,n表示本次写的字符个数。

file.put(char c), put方法用于向文件写一个字符。

file.close();//关闭文件 ,不论读或写文件,使用完后需要关闭文件。

程序如下,经过修改,显示没有错误和警告。但是运行时查找,插入,删除单词时就卡住了。请高人指点,到底是怎么回事?谢谢了!

dictionary.h

#ifndef _DICTIONARY_H

#define _DICTIONARY_H

const int size=30;

/*******************公有部分***********************/

dictionary::dictionary()//如果记录为空,创建一个*作为结尾

{

text.open("d:\\tiny-dict.txt",ios::in|ios::out);

if(text.eof())

text<<"* ";

text.close();

}

void dictionary::findWord()

{

cout<<"请输入所要查询的单词."<<endl;

string word;

cin>>word;

text.open("d:\\tiny-dict.txt",ios::in);//打开一个文件作读操作

int i=0;

while(1)

{

string temp;

text>>temp;

if(temp=="*")//在数据的末尾加上*表示文件结束

{

cout<<"未找到该单词."<<endl;

break;

}

if(word==temp)

{

cout<<"释义:";

do

{

text>>temp;

if(temp=="%")//在释义末尾加上%表示释义结束

break;

cout<<temp<<" ";

}while(temp!="%");

cout<<endl;

}

if(temp=="%")

break;

i+=size;

text.seekg(i,ios::beg);

}

text.close();

}

void dictionary::insertWord()

{

cout<<"输入你所要添加的单词."<<endl;

string word;

cin>>word;

cout<<"输入你添加单词的释义."<<endl;

string paraphrase;

cin.ignore();

getline(cin,paraphrase);

cout<<paraphrase<<endl;

text.open("d:\\tiny-dict.txt",ios::in|ios::out);

char z;

int i=-size;

while(z!='*'&&z!='+')//*用来标识结尾,+用来表示删除一个单词留下的区域

{

i+=size;

text.seekp(i);

text>>z;

}

if(word.length()+paraphrase.length()+4>size)//单词与释义之间一个空格和用于标识结尾的空格加%加空格所以加4

{

cout<<"输入太长,插入失败."<<endl;

return ;

}

text.seekp(i,ios::beg);

text<<word<<" "<<paraphrase<<" % ";

if(z=='+')

{

text.close();

return ;

}

text.seekp(i+size,ios::beg);

text<<"* ";

text.close();

}

void dictionary::deleteWord()

{

cout<<"请输入删除的单词."<<endl;

string word;

cin>>word;

text.open("d:\\tiny-dict.txt",ios::in|ios::out);

string Deleted;

int i=-size;//标记删除的位置

do

{

i+=size;

text.seekg(i);

text>>Deleted;

if(Deleted=="*")

{

cout<<"未发现该单词,删除失败"<<endl;

return ;

}

}while(Deleted!=word);

text.seekp(i);

text<<"+ ";//第一元素标记为+,表示空

for(int j=1;j<size;j++)

{

text<<" ";

}

cout<<"删除成功."<<endl;

text.close();

}

#endif

main.cpp

using std::cout;

using std::endl;

using std::cin;

#include<fstream>

using std::ios;

using std::fstream;

#include<string>

using std::string;

using std::getline;

#include"dictionary.h"

class dictionary

{

public:

dictionary();

void findWord();

void insertWord();

void deleteWord();

private:

fstream text;

};

void instruction()

{

cout<<"请选择:\n(1).查找单词\n(2).插入单词\n(3).删除单词\n(4).退出\n";

}

int main()

{

instruction();

int select=0;

cin>>select;

while(select!=1&&select!=2&&select!=3&&select!=4)

{

cout<<"选择错误,请重新选择."<<endl;

instruction();

cin>>select;

}

dictionary oper;

bool exe=true;

while(exe)

{

switch(select)

{

case 1:

oper.findWord();

break;

case 2:

oper.insertWord();

break;

case 3:

oper.deleteWord();

break;

case 4:

exe=false;

break;

}

if(select==4)

break;

instruction();

cin>>select;

while(select!=1&&select!=2&&select!=3&&select!=4)

{

cout<<"选择错误,请重新选择."<<endl;

instruction();

cin>>select;

}

}

return 0;

}

d:\\tiny-dict.txt 里的内容如下:(是个英德字典,左边一列是英语,右边是德语)

bird Raubvogel, Greifvogel

rabbit Kaninchen

monkey Affe

horse Pferd

crab Krabbe, Krebs

eagle Adler, Aar; Zehn-Dollar-Note