Đồ á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.

pdf5 trang | Chuyên mục: Lập Trình Hướng Đối Tượng | Chia sẻ: dkS00TYs | Lượt xem: 3174 | Lượt tải: 1download
Tóm tắt nội dung Đồ án Xây dựng lớp CMyString, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở 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:

  • pdfĐồ án Xây dựng lớp CMyString.pdf
  • rarCString.rar