중화사전망 - 서예자전 - Ios 사전의 기본 구현 원리

Ios 사전의 기본 구현 원리

여기서 파일을 읽고 쓸 때 포함되는 헤더 파일과 주요 방법은 다음과 같습니다.

# include & ltfstream.h & gt

# include & ltstring.h & gt

# include & ltiostream.h & gt

//파일 읽기 방법

Fstream 파일;

File.open ("data.txt", IOs:: in); //읽기를 통해 data.txt 파일을 엽니다.

File.eof () 는 파일이 읽혀졌는지 여부를 확인합니다.

File. getline(char * line, int n)

Getline 메서드는 파일에서 문자 행을 읽는 데 사용됩니다. 여기서 첫 번째 매개 변수 행은 문자열에 대한 문자 포인터 또는 문자열을 저장하는 문자 배열이며 n 은 이번에 읽을 최대 문자 수를 나타냅니다.

//파일 쓰기 방법

File.open ("data.txt", IOs:: out); //쓰기를 통해 data.txt 파일을 엽니다.

File. write(char * line, int n)

Write 메서드는 파일에 문자 행을 쓰는 데 사용됩니다. 여기서 첫 번째 매개 변수 행은 문자열에 대한 문자 포인터 또는 문자열을 저장하는 데 사용되는 문자 배열이고, n 은 이번 쓰기의 문자 수를 나타냅니다.

서류. Put(char c), put 메서드는 파일에 문자를 쓰는 데 사용됩니다.

File.close (); //파일을 읽거나 쓰는 등 파일을 닫습니다. 사용 후 파일을 닫아야 합니다.

과정은 다음과 같습니다. 수정 후 오류와 경고는 없습니다. 그러나 런타임 시 단어를 찾고 삽입하고 삭제할 때 멈춥니다. 조언 좀 해주세요. 어떻게 된 거야? 대단히 감사합니다!

사전. 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 ())

텍스트<& lt"* ";

Text.close ();

}

Void 사전:: findWord ()

{

Cout & lt& lt "질의할 단어를 입력하십시오. "라고 말합니다

문자열 문자

CIN>;; & gt 단어;

Text.open ("d: \ \ tiny-dict.txt", IOs:: in); //읽을 파일을 엽니다.

Int I = 0;;

While( 1)

{

문자열 온도

텍스트>& gttemp

If (temp = = "*")//데이터 끝에 * 를 추가하여 파일 끝을 나타냅니다.

{

Cout & lt& lt "라는 단어를 찾을 수 없습니다. "라고 말합니다

깨뜨리다

}

If(word = = temp)

{

Cout & lt& lt "해석:";

하다

{

텍스트>& gttemp

If (temp = = "%")//해석 끝에% 를 추가하여 해석 끝을 나타냅니다.

깨뜨리다

Cout & lt& lt 온도<& lt "";

} while(temp! = "%");

Cout & lt& ltendl

}

If (temp = = "%")

깨뜨리다

I+= 크기;

Text. seekg(I, IOs:: beg);

}

Text.close ();

}

Void 사전:: insertWord ()

{

Cout & lt& lt "추가할 단어를 입력합니다. "라고 말합니다

문자열 문자

CIN>;; & gt 단어;

Cout & lt& lt "추가한 단어의 정의를 입력합니다. "라고 말합니다

문자열 해석

Cin.ignore ();

게블린 (CIN, 해석);

Cout & lt& lt 해석<& ltendl

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

Char z;;

Int I =-size;;

While(z! =' *' & & ampz! ='+')//* 는 끝을 나타내고+는 단어가 남긴 영역을 제거하는 것을 나타냅니다.

{

I+= 크기;

Text.seekp (a);

텍스트>& gtz;;

}

If (word.length ()+paraphrase.length ()+4 > Size)// 단어와 해당 정의 사이의 공백과 태그 끝을 표시하는 데 사용되는 공백에% 와 한 개의 공백이 더해져 4 가 추가됩니다.

{

Cout & lt& lt 입력이 너무 길어서 삽입이 실패했습니다. "& ltendl

반환;

}

Text. seekp(I, IOs:: beg);

텍스트<< word & lt< ""<< 해석<& lt"% ";

If (z = ='+')

{

Text.close ();

반환;

}

Text. seekp(I+size, IOs:: beg);

텍스트<& lt"* ";

Text.close ();

}

Void 사전:: deleteWord ()

{

Cout & lt& lt "삭제된 단어를 입력하십시오. "라고 말합니다

문자열 문자

CIN>;; & gt 단어;

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

문자열이 삭제되었습니다

Int I =-size;; //삭제 위치 표시

하다

{

I+= 크기;

Text.seekg (I);

텍스트>& gt 가 삭제되었습니다.

If (deleted = = "*")

{

Cout & lt& lt "이 단어를 찾을 수 없습니다. 삭제에 실패했습니다." & ltendl

반환;

}

}while (제거됨! = 단어);

Text.seekp (a);

텍스트<& lt"+ "; //첫 번째 요소는+로 표시되어 비어 있음을 나타냅니다.

For (int j =1; J< 크기; J++)

{

텍스트<& lt "";

}

Cout & lt& lt "삭제에 성공했습니다. "라고 말합니다

Text.close ();

}

#endif

기본 페이지

Std:: cout; 을 사용합니다

Std:: endl;

Std:: CIN;

# include & ltfstream & gt

Std:: IOs 사용

STD::fstream; 사용

# include & lt 문자열>

STD::string;;

STD::getline; 사용

# "dictionary.h" 포함

분류 사전

{

공용:

사전 ();

Voidfindword ();

Voidinsertword ();

Void deleteword ();

개인:

Fstream 텍스트;

}

잘못된 명령 ()

{

Cout & lt& lt "선택: \ n( 1). 단어 찾기 \ n(2). 단어 삽입 \ n(3). 단어 삭제 \ n(4). 종료 \ n';

}

Int main ()

{

명령 ();

Intselect = 0;

CIN>;; & gt 선택;

While (선택! =1& & amp 선택! = 2 & amp& amp 선택! = 3 & amp& amp 선택! =4)

{

Cout & lt& lt 선택 오류입니다. & ltendl 을 다시 선택하십시오

명령 ();

CIN>;; & gt 선택;

}

사전 작업

Bool exe = true

While(exe)

{

스위치 (선택)

{

사례 1:

Oper.findword ();

깨뜨리다

사례 2:

Oper.insertword ();

깨뜨리다

사례 3:

Oper.deleteword ();

깨뜨리다

시나리오 4:

Exe = false

깨뜨리다

}

If (선택 = = 4)

깨뜨리다

명령 ();

CIN>;; & gt 선택;

While (선택! =1& & amp 선택! = 2 & amp& amp 선택! = 3 & amp& amp 선택! =4)

{

Cout & lt& lt 선택 오류입니다. & ltendl 을 다시 선택하십시오

명령 ();

CIN>;; & gt 선택;

}

}

0 을 반환합니다

}

D:\\tiny-dict.txt 는 다음과 같습니다. (영어 사전입니다. 왼쪽 열은 영어이고 오른쪽 열은 독일어입니다.)

그레이브 보겔 버드 라우부보겔

토끼고기 통조림

원숭이 Affe

마푸피드

크레브스게 클라비

독수리 애들러, Aar zean 달러 지폐