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

pdf4 trang | Chuyên mục: C/C++ | Chia sẻ: dkS00TYs | Lượt xem: 2203 | Lượt tải: 1download
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:

  • pdfThực hành ngôn ngữ lập trình C++ - Bài thực hành số 7.pdf