You are on page 1of 11

Các nội dung lập trình C++ cơ bản

(Đã học trong môn học NNTL C++)


 1) Input/output màn hình và bàn phím
 2) Lệnh cấu trúc điều khiển
 3) Cấu trúc dữ liệu:
 4) Xâu ký tự

 5) Xử lý dữ liệu với tệp văn bản


LẬP TRÌNH C++ CƠ BẢN
 Lập trình hướng đối tượng

1) Vào/ra dữ liệu với màn hình và bàn


2) Lệnh cấu trúc điều khiển
phím
 Sử dụng các hàm thư viện chuẩn(standard)  Lệnh cấu trúc rẽ nhánh
IOSTREAM của C++

 Cấu trúc lặp


 Hàm in ra màn hình

 Hàm đọc từ bàn phím


Bài tập 1 Bài tập 2
 Cho sai số epsilon = 1E-6. Tính gần đúng các giá trị  Nhập 1 mã phản hồi của Server theo giao thức FTP
sau  Lập trình in ra thông báo tương ứng với mã phản
hồi
 Các mã phản hồi
 220 Command is successfully completed
 331 User name okay, need password.
 230 User logged in, proceed. Logged out if
appropriate.
 425 Can't open data connection.
 502 Syntax error, command not implemented.

3) Cấu trúc dữ liệu struct Cấu trúc mảng dữ liệu


 Định nghĩ cấu trúc dữ liệu phức hợp chứa các thành  Chứa nhiều phần tử dữ liệu cùng kiểu
phần dữ liệu bên trong (trường dữ liệu)
 Mảng dữ liệu tĩnh:

 Mảng dữ liệu động:


Con trỏ dữ liệu (Pointer) 4) Xâu ký tự
 Là kiểu lưu trữ địa chỉ của dữ liệu trong bộ nhớ  Biểu diễn qua mảng ký tự char []

 Con trỏ đến dữ liệu nào thì tương ứng với kiểu dữ
liệu đó  Có thể dùng con trỏ char* để thao tác với xâu

Xâu ký tự
 Các hàm xử lý xâu ký tự dạng char[] và char*  Hàm biến đổi từ xâu sang số
 strcmp, stricmp, strncmp, strincmp: so sánh xâu  atoi : từ xâu sang số nguyên
 strchr, strstr: tìm kiếm kí tự, xâu con trong 1 xâu cho
 atof: từ xâu sang số thực
trước
 strtok: tách xâu thành các từ
 Tham khảo cách sử dụng các hàm trong thư viện
 strcpy: copy xâu #include <cstring>
 strcat: ghép xâu
 atoi, atof: chuyển xâu sang dạng số

 Hàm tạo xâu theo định dạng


 sprintf
Xâu ký tự với kiểu string (C++)
 Biểu diễn xâu bằng kiểu dữ liệu class string của  insert: chèn 1 xâu vào trong 1 xâu khác
C++  replace: thay thế 1 xâu con trong 1 xâu bằng 1 xâu
 string name = “Computer”; con khác
 Các hàm thành phần thao tác với kiểu string  Hàm biến đổi dữ liệu
 find: tìm kiếm một xâu con trong 1 xâu cho trước  to_string : biến đổi từ số (nguyên hoặc thực) sang xâu
 size: tính độ dài xâu
kí tự
 stoi : biến đổi từ xâu kí tự thành số nguyên int
 empty: kiểm tra xâu rỗng
 stof : biến đổi từ xâu kí tự thành số thực float
 substr: tách xâu con từ 1 xâu cho trước
 compare: so sánh 2 xâu  Tham khảo thêm lớp string và các hàm trong thư
 copy: sao chép từ xâu cho trước sang 1 xâu mới
viện #include <string>
 append: ghép 2 xâu thành 1

Các thao tác xử lý xâu kí tự hay sử


dụng trong lập trình mạng Xử lý xâu kí tự
 Tạo 1 xâu ký tự theo định dạng cho trước  Tách hoặc ghép xâu
 Sử dụng hàm sprintf  Sử dụng hàm thành phần find()
 Sử dụng đối tượng ostringstream Ví dụ
 Phân tích cú pháp xâu kí tự theo định dạng cho  Sau đó, nếu tìm thấy thì dùng hàm thành phần substr

trước
 Sử dụng hàm strtok if(p!=string::npos)
 Sử dụng istringstream {

}
Bài tập 3 Bài tập 4
 Cho các câu lệnh của giao thức POP3 với cú pháp  Cho định dạng câu lệnh SMTP là:
như sau “RCPT TO:<địa chỉ email>”
 “USER tên\r\n”
Tham số
 A) Lập trình thực hiện công việc sau
 “PASS mật khẩu \r\n”
 Nhập từ bàn phím 1 xâu ký tự biểu diễn câu lệnh trên
 “RETR số thứ tự email \r\n”
 Tách tên lệnh và địa chỉ email
 “QUIT” ◼ In ra tên lệnh nếu lệnh đúng tên
 Nhập tên, mật khẩu, số thứ tự email từ bàn phím ◼ In ra địa chỉ email nếu địa chỉ email đúng định dạng
<username>@huce.edu.vn
 Tạo các xâu kí tự chứa lệnh theo cú pháp ở trên
◼ In ra thông báo lỗi nếu tên lệnh sai hoặc địa chỉ email không
 In ra màn hình các xâu kí tự đó đúng cú pháp

Bài tập 5
 B) Lập trình  Cho một xâu kí tự chứa HTTP request như sau:
 Nhập từ bàn phím tên username "GET / HTTP/1.1\r\nHost: ktht.nuce.edu.vn\r\nUser-
 Tạo một xâu kí tự chứa câu lệnh Agent: curl/7.79.1\r\nAccept: */*\r\n\r\n“
“MAIL FROM:<username@huce.edu.vn>”
 In ra màn hình xâu đã tạo
 Hãy lập trình để tách xâu kí tự thành các thành phần
sau
 Method, URL và version
 Tách các trường thông tin Header và giá trị tương ứng

 In ra màn hình các thành phần đó


5) Thao tác với file văn bản
 Sử dụng thư viện STDIO (chuẩn C)  Đọc tệp sử dụng cấu trúc lệnh vòng lặp while()

 Mở tệp  Ghi tệp


 Ghi một xâu ký tự vào file:

 Đọc tệp
 Đọc theo dòng, lưu vào xâu char [] :

Thao tác với file (chuẩn C++)


 Sử dụng thư viện FSTREAM  Đọc theo cả khối:
Ví dụ

 Mở tệp  Ghi tệp


 Để đọc:  Ghi1 xâu / khối kí tự:
 Để ghi: Ví dụ:
char header_from[] = “from: ktht@huce.edu.vn\n”;
 Đọc tệp
 Đọc theo dòng, lưu vào xâu char [] :
◼ char buf[256];
Bài tập 6
 Một chương trình Client muốn kết nối đến Server cần có các  Yêu cầu: Hãy tạo 1 file client.conf và viết chương
thông số cấu hình sau: địa chỉ IP của Server, số cổng kết nối,
Username, Password và thư mục gốc trình đọc file đó để nhập vào các thông số cấu hình,
 Các thông số cấu hình trên được lưu trong file client.conf in các thông số đó ra màn hình
theo định dạng mỗi thông số trên 1 dòng
 <tên thông số>=<giá trị thông số>
 Ví dụ file client.conf:
 IP=192.168.3.1
 port=110
 user=tuan
 pass=jk0012~
 root=C:\box

6) Lập trình hướng đối tượng với C++ Hàm tạo và hàm hủy
 Cách khai báo lớp  Hàm tạo thực thi khi tạo đối tượng, hàm hủy thực
 class ClassName thi khi hủy đối tượng
{
 class ClassName
...
{
};
 Khai báo dữ liệu thành phần và hàm thành phần ClassName();
 class ClassName ClassName(int data);
{ ~ClassName();
int dataMember; …
int getDataMember(); };

};
Triển khai hàm thành phần
 Triển khai hàm tạo và hàm hủy  Triển khai hàm thành phần
ClassName::ClassName()  int ClassName::getDataMember()
{
{
}
ClassName::ClassName(int data) return dataMember;
{ }
dataMember = data
}
ClassName::~ClassName()
{
}

Thừa kế lớp Đa hình


 class Base  Lớp con không kế thừa các hàm thành phần virtual
{ của lớp cha

};
 Lớp con có
 class Derive : public Base // Derive thừa kế Base

{  Khi gọi hàm thành phần virtual, tùy thuộc vào kiểu
… lớp của đối tượng gọi hàm mà
};
 Lớp con Derive sẽ kế thừa các thành phần thuộc phạm
vi public và protected của lớp cha Base
Ví dụ Ví dụ
 class Base  class Derive : public Base
{ {
virtual void sayHello(); // hàm virtual của Base void sayHello(); // hàm virtual của Derive
… …
}; };
void Base::sayHello() void Derive::sayHello()
{ {
cout << “Hello, I am Base”; cout << “Hello, I am Derive”;
} }

Ví dụ Bài 7
 Gọi hàm virtual Một ứng dụng thi trực tuyến cần có tài khoản sinh viên
bao gồm những thông tin sau: mã sinh viên (string), họ tên,
Base base; trạng thái đăng nhập (true: đang đăng nhập, false: không
đăng nhập), địa chỉ IP của máy tính sinh viên (kiểu
Derive derive; unsigned long), thời gian đăng nhập (kiểu time_t), trạng
Base& ref = derive; thái nộp bài( true: đã nộp bài, false: chưa nộp bài), thời
gian nộp bài(kiểu time_t).
ref.sayHello(); // hàm sayHello() của lớp Derive  Hãy khai báo lớp SinhVien tương ứng với mô tả trên
với các dữ liệu thành phần tương ứng và các hàm
get/set trên từng dữ liệu thành phần
Chương trình in ra : “Hello, I am Derive”
 Viết một hàm thành phần để nhập dữ liệu mã sinh viên
và họ tên cho 1 đối tượng kiểu lớp SinhVien từ tệp văn
bản. Dữ liệu của tài khoản sinh viên trong tệp như sau:
 123461<TAB>Hoang Phi Hung<CRLF>
Bài 8 Định dạng file User.conf
 Hãy tổ chức 1 class có tên User, trong đó có thuộc tính là username
[user=tuan]
 Tạo 1 class có tên là FTPUser thừa kế lớp User. Lớp FTPUser sẽ có root=E:\box\tuan
thêm các thuộc tính như đường dẫn thư mục gốc root, password và pass=jk0012~
phân quyền truy nhập read, write read=yes
write=yes
[user=hung]
 Viết hàm tạo và các hàm thành phần get/set cho lớp FTPUser root=E:\box\hung
pass=hs1342*
 Ứng dụng FTP Server lưu thông tin tài khoản User trong 1 file có tên read=yes
ftpusers.conf write=no
[user=mai]
root=E:\box\mai
 Đọc dữ liệu của user từ file ftpusers.conf và lưu vào 1 vector có pass=ws1001$
phần tử là con trỏ User* (con trỏ được cấp phát động và thực sự read=no
trỏ đến đối tượng lớp FTPUser) write=yes

Nhận dạng xâu kí tự theo biểu thức


chính quy Regular Expression
 Biểu thức chính quy RegEx
 Là một dãy kí tự mô tả khuôn mẫu (quy tắc) để tạo ra
các xâu kí tự có định dạng nhất định
 Biểu thức chính quy được sử dụng để tìm kiếm hoặc đối
chiếu một xâu kí tự có phù hợp với một khuôn mẫu cho
trước hay không
 Biểu diễn biểu thức chính quy
 Sử dụng cú pháp và các kí tự đặc biệt gọi là
ĐỌC THÊM metacharacter để biểu diễn RegEx (tham khảo tài liệu)
Thao tác với bộ nhớ đệm
 Sử dụng thư viện #include <regex> trong C++ để  Bộ nhớ đệm và tác dụng
tìm kiếm và tách xâu theo biểu thức chính quy (tham
khảo https://www.cplusplus.com/reference/regex/
 Khai báo bộ nhớ đệm
 Khai báo tĩnh sử dụng mảng char
char buffer[512];
 Khai báo động sử dụng con trỏ (cần giải phóng)
char* buffer = new char[512];
delete [] buffer;

Tiếp
 Duyệt bộ nhớ đệm sử dụng con trỏ
char buffer[512];
char* p = buffer; // con trỏ ở vị trí byte đầu tiên

p = p + i; // con trỏ ở vị trí byte i+1

// chú ý p không được vượt ra ngoài độ lớn buffer

You might also like