Cài đặt lớp CMyString - Phạm Trung Nguyên
CMyString là một lớp gồm có:
- Dữ liệu là m ột con trỏ kiểu char.
-Các hàm thành viên thao tác trên chuỗi có độ dài bất kỳ.
Cài đặt lớp CMyString tạo ra một kiểu dữ liệu mới tương tự như lớp string trong thư
viện “string.h” thực hiện một số thao tác thường thấy khi làm việc với chuỗi.
BÁO CÁO ĐỒ ÁN THỰC HÀNH GIỮA KỲ Ngày 15 tháng 11 năm 2009 /* Sinh viên: Phạm Trung Nguyên Mã số sinh viên: 08520259 Lớp: K3C4 Môn: Lập trình hướng đối tượng Giáo viên: Nguyễn Văn Toàn */ 1. Lớp CMyString: CMyString là một lớp gồm có: - Dữ liệu là một con trỏ kiểu char. - Các hàm thành viên thao tác trên chuỗi có độ dài bất kỳ. Cài đặt lớp CMyString tạo ra một kiểu dữ liệu mới tương tự như lớp string trong thư viện “string.h” thực hiện một số thao tác thường thấy khi làm việc với chuỗi. 2. Các tính năng của chương trình: Các thuộc tính và phương thức của CMyString Class được khai báo trong file “CMyString.h” và được định nghĩa trong file “CMyString.cpp”, bao gồm: a/ Các hàm khởi tạo và hủy: - Hàm tạo không đối: cấp phát cho con trỏ kiểu char (thuộc tính của lớp) một vùng nhớ 2 byte rồi gán cho nó ký tự ‘\0’. - Hàm tạo sao chép. - Hàm tạo với đối số char*. - Hàm tạo với đối số là char c, int n: khởi tạo 1 chuỗi gồm n ký tự c liên tiếp giống nhau, với n mặc định bằng 1. - Hàm hủy. b/ Các toán tử: - Các toán tử so sánh ==, >, < được xây dựng để so sánh hai đối tượng CMyString hay 1 đối tượng CMyString và một đối tượng char*. - Các toán tử ghép chuỗi: ta xây dựng hai toán tử + và += rồi dùng phương pháp nạp chồng toán tử để biểu diễn: CMyString + CMyString. CMyString += CMyString. CMyString + char*. CMyString += char*. - Toán tử gán: bao gồm 2 hình thức CMyString = CMyString: gán giá trị của một đối tượng CMyString cho một đối tượng CMyString. CMyString = char*: gán giá trị của một đối tượng chuỗi cho một đối tượng CMyString. - Toán tử [int i]: dùng để lấy giá trị thứ i của chuỗi, có thể dùng để gán một ký tự cho ký tự thứ i đó. c/ Các phương thức: - String as an Array Methods: bao gồm GetLength(): Hàm trả về số ký tự trong chuỗi. IsEmpty(): Hàm kiểm tra xem chuỗi có rỗng hay không. Empty(): Hàm thiết lập chuỗi về rỗng. GetAt(int i): Hàm trả về ký tự tại vị trí thứ i. SetAt(char c,int i): Hàm gán giá trị ký tự c tại vị trí thứ i. - Comparison Methods: Compare(const CMyString &s): so sánh hai đối tượng CMyString + Trả về 1 nếu chuỗi thứ nhất lớn hơn. + Trả về 0 nếu hai chuỗi bằng nhau. + Trả về -1 nếu chuỗi thứ nhất bé hơn. Chú ý: Phương thức trên và các toán tử so sánh chuỗi: >, <, ==,... là phân biệt hoa thường (case - sensitive). CompareNoCase(const CMyString &s): so sánh hai đối tượng CMyString giống như phương thức Compare() nhưng không phân biệt hoa thường. - Extraction Methods: gồm ba phương thức Mid, Right, Left Mid(int i,int j): phương thức trả về chuỗi con trong chuỗi tính từ vị trí thứ i đến vị trí thứ j. Nếu iGetLength() (tức là độ dài của chuỗi) thì j=GetLength(), còn nếu i>j thì trả về chuỗi rỗng. Right(int i): phương thức lấy i ký tự cuối cùng của chuỗi. Nếu i<=0 thì trả về chuỗi rỗng, nếu i>=GetLength() (tức là độ dài của chuỗi) thì trả về toàn bộ chuỗi. Left(int i): phương thức lấy i ký tự đầu tiên của chuỗi. Nếu i<=0 thì trả về chuỗi rỗng, còn nếu i>=GetLength() (độ dài của chuỗi) thì trả về toàn bộ chuỗi. - Other Conversion Methods: gồm các phương thức chỉnh sửa dạng chữ, chuẩn hóa chuỗi MakeUpper(): phương thức chuyển đổi tất cả các ký tự trong chuỗi thành ký tự hoa. MakeLower(): phương thức chuyển đổi tất cả các ký tự trong chuỗi thành ký tự thường. TrimLeft(): cắt các ký tự trắng “ ” đầu chuỗi. TrimRight(): cắt các ký tự trắng “ ” cuối chuỗi. - Searching Methods: gồm có Find(): gồm có ba kiểu đối số là CMyString, char* và char. Phương thức này trả về vị trí xuất hiện đầu tiên của đối số trong chuỗi đối tượng. ReverseFind(): cũng giống như các phương thức Find(), nhưng phương thức này trả về vị trí xuất hiện cuối cùng của đối số trong chuỗi đối tượng. - Các toán tử nhập xuất đối tượng CMyString >> và <<. 3. Hàm main.cpp: Menu chính bao gồm: 01. Initializing and Cleanup. 02. Operators. 03. String as an Array Methods. 04. Comparison Methods. 05. Extraction Methods. 06. Other Conversion Methods. 07. Searching Methods. Please choose (0 to out): Bạn nhập số từ 1 đến 7 để chọn bài toán cần Demo, nhập 0 để thoát. Với mỗi lựa chọn bạn sẽ đến 1 menu con: - Chọn 1: thực hiện Demo các hàm khởi tạo và hàm hủy. 1.1 Default constructor. 1.2 Copy constructor. 1.3 Constructor called when a string is constructed with a char*. 1.4 Construction of CMyString from a char and an int. 1.5 Destructor. Please choose (0 to out,-1 to back): Bạn nhập số từ 1 đến 5 để thực hiện Demo từng chức năng, nhập 0 để thoát hẳn chương trình, nhập -1 để lùi lại menu chính. Sau khi bạn vừa thực hiện Demo xong 1 chức năng, bạn có thể tiếp tục với menu cùng cấp. Ví dụ như tại bước này bạn chọn 1, chương trình sẽ thực hiện Demo Default constructor, sau đó bạn có thể chọn tiếp 2, 3, 4…để tiếp tục Demo. Cuối cùng bạn có thể nhập -1 để trở về menu chính. - Chọn 2: thực hiện Demo các toán tử 2.1 Compare 2 CMyString object. 2.2 Compare a CMyString object and a char* object. 2.3 Concatenation of 2 CMyStrings object (+). 2.4 Concatenation of a CMyStrings object and a char* object (+). 2.5 Combine 2 CMyString object (+=). 2.6 Combine a CMyString object and a char* object (+=). 2.7 Get the character at a given position ([]). 2.8 Assignment of a CMyString into another CMyString (=). 2.9 Assignment of a char* to a CMyString (=). Please choose (0 to out,-1 to back): Bạn nhập số từ 1 đến 9 để thực hiện Demo từng toán tử, bao gồm so sánh hai đối tượng CMyString, so sánh 1 đối tượng CMyString và một đối tượng char*, nối hai chuỗi CMyString, nối một chuỗi CMyString và một chuỗi char* thành 1 chuỗi CMyString mới, thêm vào một chuỗi CMyString một chuỗi CMyString, thêm vào một chuỗi CMyString một chuỗi char*, toán tử [], toán tử gán. Nhập 0 để thoát hẳn chương trình, nhập -1 để trở lại menu chính. - Chọn 3: thực hiện Demo các phương thức xem chuỗi như mảng 3.1 Get length of object. 3.2 Check if there is empty string or not. 3.3 Set a CMyString object to Empty. 3.4 Get the character at a given position (GetAt()). 3.5 Set the character at a given position (SetAt()). Please choose (0 to out,-1 to back): Tương tự như các lựa chọn 1 và 2… - Chọn 4: thực hiện Demo các phương thức so sánh hai đối tượng CMyString, gồm có phương thức so sánh ko phân biệt hoa thường và có phân biệt hoa thường. 4.1 Compare 2 CMyString object (Noticed upper and lower). 4.2 Compare 2 CMyString object (Non - noticed upper and lower). - Chọn 5: thực hiện Demo các phương thức trích xuất chuỗi con trong chuỗi. 5.1 Extraction Methods - Mid. 5.2 Extraction Methods - Right. 5.3 Extraction Methods - Left. - Chọn 6: thực hiện Demo các phương thức khác như chuyển tất cả các ký tự trong chuỗi thành ký tự hoa, hoặc chuyển tất cả các ký tự trong chuỗi thành ký tự thường, cắt các ký tự trắng bên trái và bên phải chuỗi. 6.1 Make upper. 6.2 Make lower. 6.3 TrimLeft and TrimRight. - Chọn 7: thực hiện Demo các phương thức tìm kiếm chuỗi con hay ký tự trong chuỗi. 7.1 Find. 7.2 ReverseFind. 4. Ưu và khuyết điểm của chương trình: Chương trình chưa thực hiện được việc tự động chuyển đổi kiểu từ một đối tượng kiểu char* hay một ký tự kiểu char sang thành một đối tượng CMyString, cho nên đối với các toán tử so sánh ==, >, <, các toán tử kết hợp +, += và cả toán tử gán, nó chưa thực sự hiệu quả do phải định nghĩa 2 đến 3 toán tử cùng loại và sử dụng cơ chế nạp chồng toán tử. Đối với phương thức ReverseFind(), thuật toán này cần thiết phải dùng một hàm dùng để đảo ngược chuỗi, nhưng chương trình chưa xây dựng được phương thức này, và điều này làm code của ReverseFind() không được sáng sủa.
File đính kèm:
- Cài đặt lớp CMyString - Phạm Trung Nguyên.pdf
- CMyString.rar