Thực hành ngôn ngữ lập trình C++ - Bài thực hành số 7
A. MỤC TIÊU BÀI HỌC
• Con trỏ
• Danh sách liên kết tuyến tính đơn
• Lớp string
Tóm tắt nội dung Thực hành ngôn ngữ lập trình C++ - Bài thực hành số 7, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008 Hoàng Thị Điệp, Bộ môn Khoa học Máy tính Bài thực hành số 7 A. MỤC TIÊU BÀI HỌC • Con trỏ • Danh sách liên kết tuyến tính đơn • Lớp string B. BÀI TẬP LẬP TRÌNH 1. (Tìm hiểu lớp string) Cho cấu trúc nhân viên struct Personnel { string id; // mã nhân viên string name; // họ tên nhân viên unsigned int birthYear; // năm sinh }; Hãy viết chương trình nhập vào danh sách nhân viên và in ra danh sách đó. Cho biết trong hàm main, danh sách nhân viên được khai báo là Personnel personnels[100]; Yêu cầu: + Viết thành hàm nhập input và hàm hiển thị display; trong hàm main gọi các hàm này + Bài 1 không dùng biến toàn cục. 2. (Danh sách liên kết) Biến đổi cấu trúc nhân viên như dưới đây: struct Personnel { string id; // mã nhân viên string name; // họ tên nhân viên unsigned int birthYear; // năm sinh Personnel * next; }; Viết chương trình nhập và hiển thị danh sách danh sách liên kết nhân viên. Sử dụng biến toàn cục Personnel * firstPPtr; là con trỏ chỉ tới biến Personnel đầu danh sách. 3. Sau khi hoàn thành bài 2, a) viết hàm sortByBirthYear sắp xếp danh sách liên kết theo năm sinh tăng dần b) viết hàm sortByName sắp xếp danh sách liên kết theo họ tên (theo đúng chuỗi tên nhập vào). c) trong hàm main, sau khi nhập hãy sắp xếp danh sách bằng các hàm nói trên và hiển thị kết quả sắp xếp. 4. Sử dụng lớp (kiểu) string và istringstream để làm nhiệm vụ sau: a) Viết hàm cắt một xâu tên đầy đủ ra thành các chữ riêng biệt. void splitName(string fullName, string parts[], unsigned & numOfParts); b) Sử dụng hàm trên: đọc một tên từ bàn phím, tách thành các chữ riêng biệt và in ra màn hình mỗi dòng 1 chữ. TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008 Hoàng Thị Điệp, Bộ môn Khoa học Máy tính Ví dụ Input Nguyen Minh Triet Output Nguyen Minh Triet c) Viết hàm đổi tên lên trên đầu. Ví dụ: xâu đưa vào là “Nguyen Minh Triet” sẽ tạo thành xâu mới “Triet Nguyen Minh”. string reorderName(string fullName); d) Áp dụng câu c vào hàm sắp xếp trong bài 3 để sắp xếp theo tên rồi mới đến họ. C. PHỤ LỤC 1. Hướng dẫn bài 2 (theo thầy Lê Anh Cường) " Cần xây dựng các hàm: nhập, hiển thị, xóa. Vì dùng biến toàn cục nên khai báo các hàm này đơn giản là: void input() ; void display() ; void clear() ; " Ví dụ về tạo một nhân viên mới: Personnel * newPPtr; newPPtr = new Personnel; cout << endl << "Nhap ma: "; getline(cin, newPPtr->id); // nhap ma cout << endl << "Nhap ten: "; getline(cin, newPPtr->name); // nhap ten cout << endl << "Nhap nam sinh: "; cin >> newPPtr->birthYear; // nhap nam sinh fflush(stdin); newPPtr->next = NULL ; // hien thi de kiem tra lai cout id name << " " birthYear; " Ví dụ về liên kết các nhân viên với nhau: Cách 1: luôn luôn có một con trỏ chỉ đến nhân viên hiện thời, giả sử là Personnel * currentPPtr; // … // sau khi tạo xong newPPtr currentPPtr->next = newPPtr; currentPPtr = newPPtr; // bây giờ nhân hiện thời lại là newPPtr Cách 2: chạy firstPPtr đến cuối và gắn newPPtr vào. TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008 Hoàng Thị Điệp, Bộ môn Khoa học Máy tính 2. Lớp string: các hàm được cung cấp Tham khảo từ: C++ Standard Library: A Tutorial and Reference (Nicolai M. Josuttis) Thao tác Tác dụng các hàm tạo Tạo ra hay copy một string hàm hủy Hủy một string =, assign() Gán một giá trị mới swap() Đảo các giá trị của 2 string +=, append(), push_back() Nối thêm các ký tự insert() Chèn thêm các ký tự erase() Xóa các ký tự clear() Xóa bỏ toàn bộ ký tự (làm xâu thành rỗng) resize() Thay đổi số lượng ký tự (xóa hoặc nối các ký tự tại cuối xâu) replace() Thay thế các ký tự + Nối các string ==, !=, , >=, compare() So sánh các string size(), length() Trả về số lượng ký tự max_size() Trả về số lượng ký tự lớn nhất có thể empty() Trả lời câu hỏi xâu có rỗng không capacity() Trả về số lượng ký tự có thể chứa nếu không cấp phát lại [], at() Truy cập một ký tự >>, getline() Đọc một giá trị từ luồng << Viết một giá trị vào luồng copy() Sao hoặc ghi nội dung ra một xâu kiểu C c_str() Trả về một giá trị như xâu kiểu C data() Giả về giá trị như một mảng ký tự substr() Trả về một xâu con xác định find functions Tìm kiếm một xâu con hay một ký tự xác định begin(), end() Cung cấp hỗ trợ iterator chuẩn rbegin(), rend() Cung cấp hỗ trợ iterator ngược get_allocator() Trả về thể hiện bộ cấp phát được dùng để tạo ra string Tìm hiểu thêm tại: TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008 Hoàng Thị Điệp, Bộ môn Khoa học Máy tính 3. Ví dụ về istringstream và ostringstream (tham khảo từ ) Chương trình 1 Kết quả chương trình 1 // istringstream::str #include #include #include using namespace std; int main () { int val,n; istringstream iss; string strvalues = "32 240 2 1450"; iss.str (strvalues); for (n=0; n<4; n++){ iss >> val; cout << val+1 << endl; } //cin.get(); return 0; } 33 241 3 1451 Chương trình 2 Kết quả chương trình 2 // ostringstream::str #include #include #include using namespace std; int main () { ostringstream oss; string mystr; oss << "Sample string"; mystr=oss.str(); cout << mystr; //cin.get(); return 0; } Sample string
File đính kèm:
- Thực hành ngôn ngữ lập trình C++ - Bài thực hành số 7.pdf