You are on page 1of 13

Chương 2

Kỹ thuật xử lý Chuỗi
Chuỗi ký tự
 Chuỗi được xem như là một mảng 1 chiều gồm các
phần tử có kiểu char như mẫu tự, con số và bất cứ ký
tự đặc biệt như +, -, *, /, $, #,…
 Chuỗi ký tự (string) là một dãy kí tự tuyến tính đặc
trưng cho một kiểu dữ liệu. Chuỗi ký tự có thể biểu
diễn bằng chuỗi nhị phân.
 Chuỗi nhị phân là một dãy bao gồm các ký tự 0 và 1.
Chuỗi nhị phân là một kiểu chuỗi ký tự đặc biệt.

2
Chuỗi ký tự
 Khởi tạo chuỗi ký tự như mảng thông thường có độ
dài cụ thể:
char s[10] = {‘T’, ‘H’, ‘C’, ‘S’, ‘ ’, ‘A’, ‘\0’};
char s[10] = “THCS A”; // Tự động thêm ký tự ‘\0’
 Khởi tạo chuỗi ký tự bằng cách tự xác định độ dài:
char s[ ] = {‘T’, ‘H’, ‘C’, ‘S’, ‘ ’, ‘A’, ‘\0’};
char s[ ] = “THCS A”; // Tự động thêm ký tự ‘\0’
 Độ dài chuỗi = kích thước mảng – 1, ví dụ:
char hoten[30]; // Dài 29 ký tự
char ngaysinh[9]; // Dài 8 ký tự

3
Chuỗi ký tự
Ví dụ: Sử dụng hàm strcpy
#include <iostream.h>
#include <string.h>
int main ()
{
char szMyName [20];
strcpy (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}

4
Chuỗi ký tự
Ví dụ:Tạo giá trị cho chuỗi ký tự
#include <iostream.h>
void setstring (char szOut [], char szIn [])
{ int n=0; do
{ szOut[n] = szIn[n];
n++;
} while (szIn[n] != 0);
}
int main ()
{ char szMyName [20];
setstring (szMyName,"J. Soulie");
cout << szMyName; return 0;
}

5
Chuỗi ký tự
Ví dụ: Sử dụng hàm strcpy
#include <iostream.h>
#include <string.h>
int main ()
{
char szMyName [20];
strcpy (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}

6
Chuỗi ký tự
 Sử dụng cin.getline
#include <iostream.h>
int main ()
{
char mybuffer [100];
cout << "What's your name? ";
cin.getline (mybuffer,100);
cout << "Hello " << mybuffer << ".\n";
cout << "Which is your favourite team? ";
cin.getline (mybuffer,100);
cout << "I like " << mybuffer << " too.\n";
return 0;
}
7
Chuỗi ký tự
 atoi: chuyển chuỗi ký tự thành kiểu int.
 atol: chuyển chuỗi ký tự thành kiểu long.
 atof: chuyển chuỗi ký tự thành kiểu float.

8
Chuỗi ký tự
 char* strcat (char* dest, const char* src);
Gắn thêm chuỗi src vào phía cuối của dest. Trả về
dest.
 int strcmp (const char* string1, const char* string2);
So sánh hai xâu string1 và string2. Trả về 0 nếu hai
xâu là bằng nhau.
 char* strcpy (char* dest, const char* src);
Copy nội dung của src cho dest. Trả về dest.
 size_t strlen (const char* string);
Trả về độ dài của string.

9
Chuỗi ký tự
 char *strdup(const char *s);
Tạo bản sao của một chuỗi s cho trước. Hàm sẽ tự
tạo vùng nhớ dài strlen(s) + 1 (bytes) để chứa chuỗi s.
Phải tự hủy vùng nhớ này khi không sử dụng nữa.
Nếu thành công trả về con trỏ đến vùng nhớ chứa
chuỗi bản sao. Ngược lại, trả về NULL.
 char *strlwr(char *s)
Chuyển chuỗi s thành chuỗi thường.
 char *strupr(char *s)
Chuyển chuỗi s thành chuỗi in hoa.
 char *strrev(char *s)
Đảo ngược thứ tự các ký tự trong chuỗi s (trừ ký tự
kết thúc chuỗi).
10
Chuỗi ký tự
 Hạn chế của kiểu chuỗi trong C
- Phải chủ động kiểm soát bộ nhớ cấp phát cho
chuỗi ký tự
- Không thể gán giá trị hay sử dụng phép toán +
(ghép chuỗi) và các phép toán so sánh như: >
(lớn hơn), < (nhỏ hơn),… mà phải gọi các hàm
thư viện trong <string.h>.
 Kiểu chuỗi string trong thư viện STL của C++
Thư viện chuẩn STL (Standard Template Library) của
C++ có hỗ trợ kiểu string cùng với các phép toán và
phương thức khá tiện lợi cho người lập trình.
11
Chuỗi ký tự
 Hạn chế của kiểu chuỗi trong C
- Phải chủ động kiểm soát bộ nhớ cấp phát cho
chuỗi ký tự
- Không thể gán giá trị hay sử dụng phép toán +
(ghép chuỗi) và các phép toán so sánh như: >
(lớn hơn), < (nhỏ hơn),… mà phải gọi các hàm
thư viện trong <string.h>.
 Kiểu chuỗi string trong thư viện STL của C++
Thư viện chuẩn STL (Standard Template Library) của
C++ có hỗ trợ kiểu string cùng với các phép toán và
phương thức khá tiện lợi cho người lập trình.
12
13

You might also like