BVKien_Slide_6 Char and Stringalkkdjfoa.pdf

hieudztm10 0 views 20 slides Oct 01, 2025
Slide 1
Slide 1 of 20
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20

About This Presentation

xâu


Slide Content

NGÔN NGỮ LẬP TRÌNH C++
Giảngviên: Th.SBùiVănKiên
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Silde 6: Char & String
1

1. Xâu kí tự trong C++
Mảng các kí tự:
◼Nguyên bản từ ngôn ngữ C
◼Một xâu có thể được coi là một mảng một chiều, trong đó mỗi
phần tử là một ký tự. Ký tự kết thúc là ‘\0’
◼char s1[200];
◼cin >> s1; nhập xâu thông thường
◼cin.getline(s1,200): nhập nguyên 1 dòng. Đọc cả chuỗi chứa
khoảng trắng cho đến khi gặp ký tự phân cách (mặc định là '\n')
◼strcpy(s1, s2): copy xâu s2 vào s1
◼strcat(s1, s2): nối xâu s2 vào sau xâu s1
◼strlen(s) : tính độ dài xâu s
◼strcmp(s1, s2): so sánh hai xâu s1 và s2 theo thứ tự từ điển.
2

1. Xâu kí tự trong C++
Mảng các kí tự:
3
char first_name[5] = { 'J', 'o', 'h', 'n', ' \0' };
char last_name[6] = "Minor";
char other[] = "Tony Blurt";
char characters[8] = "No null";
first_name
last_name
other
characters
'J''o''h''n'0
'M''i''n''o''r'0
'T''o'‘n’'y'32'B''l''u''r''t'0
'N''o'32'n''u''l''l'0

1. Xâu kí tự trong C++
Chuyển đổi giữa số và kí tự dựa trên mã ASCII
◼Mã ascii của kí tự ‘0’ là 48
◼Mã ascii của kí tự ‘1’ là 49
◼…….
◼Mã ascii của kí tự ‘9’ là 57
◼Mã ascii của kí tự ‘a’ là 97
◼Mã ascii của kí tự ‘A’ là 65
4

1. Xâu kí tự trong C++
Các lỗi thường gặp:
◼Khi đọc bằng cin, xâu sẽ ngắt khi gặp kí tự ‘space’ (dấu cách)
đầu tiên.
◼Đối với bài toán có nhập số lượng testcases và input là xâu có
dấu cách, chúng ta sử dụng cin.getline → Xuất hiện vấn đề
→ nhập bị thiếu 1 test case, do nhận dấu “\n” của cin >> numTests
là một xâu kí tự.
◼Xử lí: sử dụng cin.ignore(1); sau câu lệnh cin >> numTests;
5

1. Xâu kí tự trong C++
Các lỗi thường gặp:
◼Khi đọc bằng cin, xâu sẽ ngắt khi gặp kí tự ‘space’ (dấu cách)
đầu tiên.
◼Input: Nguyen Van An
◼Output: Nguyen
◼Xử lí: sử dụng cin.getline(s, length)
6
#include <iostream>
using namespace std;
int main(){
char szFullName[10];
cin >> szFullName;
cout << szFullName << endl;
return 0;
}

1. Xâu kí tự trong C++
Các lỗi thường gặp:
◼Lỗi tràn mảng
◼Input: NguyenVanAn (Có 11 kí tự, + NULL → 12 kí tự)
◼Chương trình bị lỗi sau khi nhập input
◼Xử lí: tăng kích thước mảng
7
#include <iostream>
using namespace std;
int main(){
char szFullName[10];
cin >> szFullName;
cout << szFullName << endl;
return 0;
}

2. std::string
◼Là một lớp class (đối tượng đóng gói) trong thư viện STL dùng cho
xử lí xâu.
◼String s = “abc”
◼String không có kí tự NULL ở cuối (khác mảng char[]).
◼Đảo ngược 1 string: reverse(s.begin(), s.end())
◼Phép cộng 2 string:
string a = “12”, b = “34”;
string c = a + b;
◼Phép cộng kí tự vào string
string d = “12”;
string e = d + ‘3’;
8

2. std::string
Kiểu dữ liệu string
Trong C++ có kiểu dữ liệu dành riêng cho xử lý chuỗi là string
◼s1 = s2 sao chép xâu s2 vào s1
◼s1 = s1 + s2 Nối s2 vào sau s1
◼s1 == s2 So sánh xâu s1 có trùng xâu s2 hay không
◼s1 < s2 So sánh xâu s1 có đứng trước s2 hay không (từ điển)
◼s1 > s2 So sánh xâu s1 có đứng sau s2 hay không (từ điển)
◼s1 <= s2 So sánh xâu s1 có đứng trước hoặc trùng s2 (từ điển)
◼s1 >= s2 So sánh xâu s1 có đứng sau hoặc trùng s2 (từ điển)
◼s1 != s2 So sánh xâu khác nhau hay không
9

2. std::string
Thứ tự từ điển
◼(tiếngAnh:lexicographicorder)làcáchsắpxếpcácchuỗikýtự
giốngnhưcáchtừđượcsắpxếptrongtừđiển.
◼Nóiđơngiản: Sosánhtừngkýtựmộttừtráiquaphải.Kýtựnào
đứngtrướctheobảngchữcáithìchuỗichứanóđứngtrước.
◼Ví dụ
◼“app" → vì ngắn hơn "apple" nhưng có tiền tố giống nhau
◼"apple"
◼"apricot"
◼"banana"
10

2. std::string
Kiểu dữ liệu string: Cẩn thận với độ phức tạp của các hàm.
STT Tên hàm
(Phương thức)
Ý nghĩa
1 s.size() hoặc
s.length()
Trả lại độ dài string s → O(1)
2 getline(cin, s) Nhập một dòng từ bàn phím cho string s
3 s.substr(x, k) Tạo ra một xâu con có k kí tự, từ vị trí thứ x
4 s.erase(x, k) Xóa k ký tự trong s kể từ vị trí thứ x
5 s.insert(x, s1) Chèn s1 vào s kể từ vị trí thứ x.
6 s.insert(x, s1, k, m)Chèn m ký tự kể từ ký tự thứ k trong s1 vào s kể từ vị trí thứ x.
7 s.replace(x, k, s1)Thay thế k ký tự trong s kể từ vị trí thứ x bằng xâu s1.
8 s.find(s1) Trả lại vị trí xuất hiện đầu tiên của s1 trong s → O(n)
9 s.rfind(s1) Trả lại vị trí xuất hiện cuối cùng của s1 trong s → O(n)
10 s.at(int i) hoặc s[i]Truy nhập đến phần tử thứ i trong string → O(1)

2. std::string
Duyệt string
◼for (int i = 0; i < (int)s.size(); i++)
Nhập liệu kết hợp
◼Khi kết hợp nhập liệu các dạng dữ liệu khác nhau, có thể xảy
ra một số ký tự bị bỏ qua không mong muốn.
◼Có thể sử dụng cin.ignore() để khắc phục
12

2. std::string
Tạo xâu con
◼Cú pháp: string newString = s.substr(pos, len)
◼pos: vị trí bắt đầu lấy xâu con (chỉ số đầu tiên bắt đầu từ 0)
◼len: độ dài xâu con
13

2. std::string
Xóa kí tự
◼Cú pháp: s.erase(pos, len)
◼pos: vị trí bắt đầu xóa (chỉ số đầu tiên bắt đầu từ 0)
◼len: số kí tự cần xóa
14

2. std::string
So sánh String và mảng char[]
15
Tiêu chí Mảng char[] String
Kí tự kết thúc Cần có '\0' ở cuối chuỗi để
biết điểm dừng
Không có kí tự NULL ở
cuối
Nối chuỗi Dùng strcat hoặc tạo xâu
mới bằng cách ghép từng
kí tự của 2 xâu
Dùng toán tử +
So sánh chuỗi strcmp(s1, s2) Dùng trực tiếp ==, !=,
<, >
Hiệu năng Chạy nhanh hơn Chậm hơn nhưng linh
hoạt hơn
Khi nào nên sử
dụng
Khi cần hiệu suất cao, ví dụ
như hệ thống nhúng
Khi làm việc với chuỗi
một cách linh hoạt

2. std::string
Sử dụng stringstream
◼C++chophépmộtsốstreamsửdụngchocácđốitượng
std::string,cóthểsửdụngcáctoántử(<<)và(>>)đểlàm
việcvớistd::string.Stringstreamcungcấpmộtbufferđể
chứadữliệu.Tuynhiên,stringstreamkhôngkếtnốiđếncác
Input/Outputchannel(nhưkeyboard,monitor,file,…)
◼Thư viện:
#include <sstream>
◼Ví dụ:
stringstream ss;
ss << "Hello" << " " << "PTIT" << endl;
cout << ss.str();
16

2. std::string
Sử dụng stringstream
◼Một số phương pháp đưa dữ liệu vào:
stringstream ss;
ss.str("Hello PTIT\n");
◼Hoặc:
stringstream ss("Hello PTIT\n“);
◼Tách từ:
string token = "";
while (ss >> token) {
cout << token << endl;
}
17

2. std::string
Chức năng
◼Chuyển đổi giữa số và xâu như to_string(), stoi() nhưng linh
hoạt hơn:
stringstream ss;
ss << 123;
string str = ss.str(); // "123“
◼Tách từ theo khoảng trắng:
stringstream ss("a b c d");
string token;
while (ss >> token) {
cout << token << endl; // In ra: a, b, c, d
}
18

3. Bài tập
◼Cácbàitoánchuẩnhoá/xửlýxâu
◼Viếtchươngtrìnhchuẩnhóatên
◼Viếtchươngtrìnhloạibỏxâucon
◼Cácbàitoánxửlýsốnguyênlớn: viếtchươngtrìnhtính
tổng/hiểu/tíchhaisốnguyênlớn
◼Cácbàitậpvềsốđẹp
19

QUESTIONS & ANSWERS
20
Tags