Tạo từ điển từ File văn bản bằng danh sách liên kết

Tạo từ điển: Có một menu làm các công việc sau:

  1. Khởi tạo từ điển TD từ file TD.DAT:
    Đọc file TD.DAT là văn bản (file này đã chứa sẵn các từ có tối đa là 7 ký tự). Mỗi từ chỉ có các ký tự trong tập [‘A’…’Z’].
    Các từ trong file đã được sắp xếp theo thứ tự ABC) và lưu các từ này vào một mảng các danh sách móc nối. Cụ thể:
    Nut * TD[26]; //lưu 26 danh sách tương ứng chữ cái[‘A’…‘Z’]
    Trong đó, kiểu Nut được khai báo như sau:
    Struct Nut
    {
    char Tu[7];
    Nut *Tiep;
    }
    Ví dụ: File TD.DAT có 3 từ: ANH, BAN, BONG.
    TD[0]: ANH
    TD[1]: BAN -> BONG

    Còn TD[2],..., TD[25]  đều là NULL.
    
    • Lưu ý: Nếu file này chưa có thì cho các phần tử của mảng đều là NULL.
  2. Liệt kê tất cả các từ trong TD:
    Gõ vào ký tự, sau đó hiển thị tất cả các từ có ký tự đầu là ký tự được gõ vào.

  3. Bổ sung một từ:
    Từ bàn phím gõ vào một từ. Nếu từ đó chưa có trong TD thì bổ sung nó vào TD, còn ngược lại thì thông báo: “Từ này đã có trong TD”.

  4. Xoá một từ:
    Từ bàn phím gõ vào một từ. Nếu từ đó có trong TD thì xoá khỏi TD, còn ngược lại thì thông báo: “Không có từ này trong TD”.

  5. Cập nhật từ điển từ một file văn bản:
    Đọc một file văn bản bất kỳ, trong đó có chứa các từ (một từ được quy định là các ký tự liên tiếp trong tập [‘A’… ‘Z’]) các ký tự
    còn lại đều coi là dấu phân cách). Cứ mỗi từ đọc được trong file văn bản này hãy thực hiện công việc sau: Nếu từ đó không tìm
    thấy trong TD thì chèn nó vào vị trí thích hợp.

  6. Lưu TD vào file TD.DAT.

Không hiểu sao code của em chạy ra sai kết quả , anh chị nào biết giúp em cái

DEMO CODE :

#include <fstream>
#include<iostream>
#include<string.h>
using namespace std;

struct Nut{
	char Tu[7];
	Nut *Tiep;
};
Nut *TD[26];

/*void HamDocFile(ifstream &FileIn, string &sName , int a[100] , int &n)//ifstream la mo phai che do doc
{
	//mo file 
	FileIn.open(sName ,ios::in);//in de doc
	//kiem tra file 
	if (FileIn.fail())
	{
		cout<<"\nKhong tim thay file !"<<endl;
		system("pause");
		exit(0);
	}
	int i= 0 ;
		//doc file
		while(!FileIn.eof())//xem thu den cuoi file chua
		{
			FileIn>> a[i];
			i++;
			n= i;<< // de biet kich thuoc mang
		}
		//dong file
		FileIn.close();
		return;
} */
void  BoSungDau(Nut *&TD , char KyTu )
{
	Nut *p = new Nut;
int n;
	cout<<"\nNhap n : ";
	cin>>n;
	for ( int i = 0 ; i < n ; i ++)
	{
		cout<<"TD["<<i<<"]="<<strcpy(p->Tu,KyTu);
		p->Tiep = TD;
		TD = p;
	}
}
void HienThi(Nut *TD)
{
	Nut * q = TD;
	while(q!= NULL)
	{
		cout<<q->Tu<<endl;
		q = q->Tiep;
	}
}
void DocFile()
{
	int n;
	ifstream data;
	char  KyTu[6];
	data.open("td.dat.txt");
	if (data.is_open())
	{
		while(!data.eof())//xem thu den cuoi file chua
		{
			data>>KyTu;
			BoSungDau(TD,KyTu);
		}
		HienThi(TD);
			
	}
	data.close();
	

}



int main()
{
	
	int chon;	
	do{
		cout<<"\n_______MENU_______"<<endl;
		cout<<"\n0.Thoat\n1.Khoi tao\n2.Liet ke \n3.Bo sung\n4.Xoa "<<endl;
		cout<<"\nMoi ban nhap   , bam 0 de thoat  "<<endl; 
		cin>>chon;
		switch(chon)
		{
			case 0 : break;
			case 1 : 
				
			DocFile();
			
			break;
			
			
			case 2 :   break;
			case 3 :  break;
		}
	}while (chon);
	system("pause");
	return 0;
}
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?