중화사전망 - 서예자전 - 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 달러 지폐