Đồ án Xây dựng lớp CMyString
Trong lập trình C/C++, việc sử dụng mảng ký tự char[] đã trở thành một trong những
cấu trúc dữ liệu thông dụng vì tính đa d ụng của nó trong xử lý các bài toán thực tế.
Tuy nhiên, việc lập trình lại các mảng ký tự char[] vẫn gây ra nhiều phiền phức cho
lập trình viên khi phải kết cấu lại từ đầu mỗi khi cần sử dụng mảng ký tự char[] này.
Vì vậy, việc xây dựng một lớp (class) nhằm hỗ trợ thao tác trên mảng ký tự char[]
một cách thuận tiện hơn đã được chú trọng trong thời gian vừa qua.
Lớp [CMyString] được xây dựng dựa trên mục đích trên.
Bộ môn Lập trình Hướng đối tượng Sinh viên: Lê Đình Bảo/ Nguyễn Việt Quốc Đồ Án Giữa Kỳ - Lớp [CMyString] Page : 1 / 5 ÑAÏI HOÏC QUOÁC GIA THAØNH PHOÁ HOÀ CHÍ MINH TRÖÔØNG ÑAÏI HOÏC COÂNG NGHEÄ THOÂNG TIN ------oOo------ BAÙO CAÙO ÑOÀ AÙN GIÖÕA KYØ Xaây döïng lôùp CMyString Moân : OOP Giảng viên phụ trách : - Ths. Nguyễn Văn Toàn. - Gv. Trương Phước Hưng. Sinh viên thực hiện: - Lê Đình Bảo [MSSV : 08520024] - Nguyễn Việt Quốc [MSSV : 08520581] Bộ môn Lập trình Hướng đối tượng Sinh viên: Lê Đình Bảo/ Nguyễn Việt Quốc Đồ Án Giữa Kỳ - Lớp [CMyString] Page : 2 / 5 BAÙO CAÙO CHI TIEÁT A. Tổng quan lớp [CMyString]: I. Giới thiệu lớp [CMyString]: Trong lập trình C/C++, việc sử dụng mảng ký tự char[] đã trở thành một trong những cấu trúc dữ liệu thông dụng vì tính đa d ụng của nó trong xử lý các bài toán thực tế. Tuy nhiên, việc lập trình lại các mảng ký tự char[] vẫn gây ra nhiều phiền phức cho lập trình viên khi phải kết cấu lại từ đầu mỗi khi cần sử dụng mảng ký tự char[] này. Vì vậy, việc xây dựng một lớp (class) nhằm hỗ trợ thao tác trên mảng ký tự char[] một cách thuận tiện hơn đã được chú trọng trong thời gian vừa qua. Lớp [CMyString] được xây dựng dựa trên mục đích trên. II. Kết cấu của lớp [CMyString]: Lớp CMyString được xây dựng bằng việc lưu trữ danh sách liên kết hai chiều, bao gồm một lớp [node] là một nút liên kết hai chiều và lớp [CMyString] để quản lý các [node] trong dãy. Sơ đồ lớp: node - pre, next : node* + node() + node(char) Cấu trúc lớp [node]: class node { public: char c; node *next, *pre; node(); node(char); }; Cấu trúc lớp [CMyString]: class CMyString { private: char strupr1(char); char strlwr1(char); void AddHead(char); public: node *head, *tail; // Hai phần tử kiểm soát dãy CMyString - head, tail : node* - strupr1(char) : char - strlwr1(char) : char - AddHead(char) : void + CMyString() + CMyString(char, long) + CMyString(char*) + … Bộ môn Lập trình Hướng đối tượng Sinh viên: Lê Đình Bảo/ Nguyễn Việt Quốc Đồ Án Giữa Kỳ - Lớp [CMyString] Page : 3 / 5 // Các hàm Constructor CMyString(); CMyString(char); CMyString(char, long); CMyString (const CMyString&); ~CMyString(); // Destructor // Các hàm xử lý dạng mảng ký tự void Add(char); void Add(char*); void AddFirst(char); void AddFirst (char*); void RemoveLastNode(); void RemoveFirstNode(); long GetLength(); bool IsEmpty(); void Empty(); char GetAt(long); char& SetAt(long); // Các hàm chuyển đổi style và thao tác ký tự thừa. CMyString MakeUpper(); CMyString MakeLower(); CMyString TrimLeft(); CMyString TrimRight(); CMyString Trim(); // Các hàm trích xuất, so sánh và tìm kiếm CMyString Mid(long _x, long _y); CMyString Left(long _x); CMyString Right(long _x); int Compare(const CMyString& _s); int CompareNoCase(const CMyString& _s); long Find(CMyString &k); long ReverseFind(CMyString &k); // Overloading operator – Nạp chồng toán tử bool operator == (const CMyString&); friend bool operator ==(char*, const CMyString&); bool operator > (const CMyString&) friend bool operator >(char*, const CMyString&); bool operator < (const CMyString&); friend bool operator <(char* c,const CMyString&); CMyString operator + (const CMyString&) CMyString operator + (char*) friend CMyString operator + (char*, const CMyString&); friend CMyString operator + (const CMyString&, const CMyString&) void operator += (const CMyString&); void operator += (char*); char& operator[](long); CMyString operator = (const CMyString&); CMyString operator = (char*); friend ostream& operator << (ostream& ,const CMyString&); friend istream& operator >> (istream& ,CMyString&); B. Sử dụng lớp CMyString: Để sử dụng lớp CMyString, bạn cần phải #include thư viện “CString.h” #include "CString.h" using namespace std; Bộ môn Lập trình Hướng đối tượng Sinh viên: Lê Đình Bảo/ Nguyễn Việt Quốc Đồ Án Giữa Kỳ - Lớp [CMyString] Page : 4 / 5 Khai báo sử dụng một lớp [CMyString]: CMyString s1; CMyString s2 (“Hello CMyString”); CMyString s3(s2); CMyString s4 = s3; s1 = “Su dung phep gan de khoi tao.”; cout << s1 << endl; // Output : Su dung phep gan de khoi tao. cout << s2 << endl; // Output : Hello CMyString cout << s3 << endl; // Output : Hello CMyString cout << s4 << endl; // Output : Hello CMyString C. Overloading operator và các hàm so sánh: Các lớp [CMyString] có thể được so sánh trực tiếp, hoặc thông qua các hàm so sánh dựng sẵn: - Compare(const CMyString&) : So sánh hai chuỗi có phân biệt chữ hoa/ thường. - CompareNoCase(const CMyString&) : So sánh hai chuỗi không phân biệt chữ hoa/ thường. cout << s1 == s2 << endl; // Output : false cout << s2 == s3 << endl; // Output : true cout << s2 < s3 << endl; // Output : false cout s2 << endl; // Output : false cout << s1.Compare(s2) << endl; // Output : false cout << s2.Compare(s3) << endl; // Output : true cout << s3.CompareNoCase(s2) << endl; // Output : true D. Các hàm xử lý dạng mảng ký tự: [CMyString] hỗ trợ các phương thức để xử lý như một mảng các ký tự char[], bao gồm: - GetLength() : Trả về chiều dài chuỗi. - IsEmpty() : Kiểm tra chuỗi rỗng. - Empty() : Làm rỗng một chuỗi. - GetAt (long) : Trả về phần tử trong dãy. - SetAt (long) : Thay đổi một phần tử ở vị trí bất kỳ trong dãy. s1.SetAt(0) = ‘A’; cout << s1 << endl; // Output : Au dung phep gan de khoi tao. cout << s2.IsEmpty() << endl; // Output : False; cout << s1.GetAt(0) << endl; // Output : A cout << s2.GetLength() << endl; // Output : 15 s2.Empty(); // Output Nothing cout << s2.GetLength() << endl; // Output : 0 E. Trích xuất nội dung, chuyển đổi dạng và tìm kiếm với lớp CMyString: Để trích xuất nội dung của một chuỗi lưu trữ, [CMyString] cung cấp: - Left(long) : để trích xuất dữ liệu từ phía bên trái chuỗi. - Right(long) : để trích xuất dữ liệu từ phái bên phải chuỗi. - Mid(long, long) : để trích xuất dữ liệu nằm bên trong chuỗi. Các hàm chuyển đổi được [CMyString] cung cấp: - MakeUpper() : chuyển toàn bộ chuỗi thành chữ HOA. - MakeLower() : chuyển toàn bộ chuỗi thành chữ thường. Bộ môn Lập trình Hướng đối tượng Sinh viên: Lê Đình Bảo/ Nguyễn Việt Quốc Đồ Án Giữa Kỳ - Lớp [CMyString] Page : 5 / 5 - TrimLeft() : loại bỏ các khoảng trắng ở đầu chuỗi. - TrimRight() : loại bỏ các khoảng trắng ở cuối chuỗi. - Trim() : loại bỏ các khoảng trắng ở đầu và cuối chuỗi. Các hàm tìm kiếm chuỗi được [CMyString] cung cấp: - Find(const CMyString&) : Tìm kiếm và trả về vị trí của dãy con trong chuỗi - ReverseFind (const CMyString&) : Tương tự hàm Find, nhưng tìm với thứ tự ngược lại. cout << s1.Left(7) << endl; // Output : Su dung cout << s2.Right(4) << endl; // Output : ring cout << s1.Mid(1, 4) << endl; // Output : u d cout << s1.MakeUpper() << endl; // Output : SU DUNG PHEP GAN DE … cout << s2.MakeLower() << endl; // Output : hello cmystring s1 = “ Hello World “; // WOW, a lot of spaces… cout << s1.TrimLeft() << endl; // Output : Hello World_____________ cout << s1.TrimRight() << endl; // Output : Hello World s3 = “CMyString”; cout << s2.Find(s3) << endl; // Output : 6 cout Not Found F. Đánh giá chung: Do chưa có nhiều kinh nghiệm trong việc xử lý hư ớng đối tượng và kỹ thuật lập trình còn hạn chế, nên việc xây dựng lớp [CMyString] không tránh khỏi sai sót. Cụ thể là: - Số lượng toán tử nạp chồng chưa đa dạng, có thể gây khó chịu cho lập trình viên. - Lưu con trỏ hai chiều gây bộ nhớ lớn nếu dữ liệu nhập lớn. - Phải sử dụng một lớp phụ [node] để giải quyết vấn đề lưu trữ. - Chưa xây dựng các hàm để cắt chuỗi, hoặc xử lý tìm kiếm + sửa chữa trong chuỗi. - .v.v… G. Lời kết: Đồ Án xây dựng lớp [CMyString] là một đồ án hay, có khả năng giúp sinh viên thao tác với các dạng kỹ thuật lập trình hướng đối tượng, đồng thời là xử lý các chuỗi ký tự, vốn là khó khăn đối với các lập trình viên mới. Chúng em rất mong nhận được sự đóng góp ý kiến và chỉ dẫn của các thầy cô hướng dẫn để có thể cải tiến và nâng cao khả năng xử lý hướng đối tượng.
File đính kèm:
- Đồ án Xây dựng lớp CMyString.pdf
- CString.rar