4.4|
Các hàm xử lý chuỗi nằm trong thư viện “string.h”. C|c ký tự s viết tắt trong hàm là chuỗi.
STRCPY(S, T) 4.4.1| 4.4.1|
Gán nội dung của x}u t cho x}u s (thay cho phép g|n = không được dùng). Hàm sẽ sao chép toàn bộ nội dung của xâu t (kể cả kí tự kết thúc xâu) vào cho x}u s. Để sử dụng hàm này cần đảm bảo độ dài của mảng s ít nhất cũng bằng độ dài của mảng t. Trong trường hợp ngược lại kí tự kết thúc xâu sẽ gây tràn dữ liệu và cho kết quả khơng như mong đợi.
Ví dụ:
char s[10], t[10];
t = "Face"; // không được dùng
s = t; // không được dùng
strcpy(t, "Face"); // được, gán "Face" cho t
Tài liệu giảng dạy Trang 33
cout << s << " to " << t; // in ra: Face to Face
STRCAT(S, T) 4.4.2| 4.4.2|
Nối một bản sao của t vào sau s (thay cho phép +). Hiển nhiên hàm sẽ loại bỏ kí tự kết thúc x}u s trước khi nối thêm t. Việc nối sẽ đảm bảo lấy cả kí tự kết thúc của xâu t vào cho s (nếu s đủ chỗ) vì vậy ta khơng cần thêm kí tự này vào cuối xâu. Tuy nhiên, hàm không kiểm tra xem liệu độ dài của s có đủ chỗ để nối thêm nội dung, việc kiểm tra này phải do người dùng đảm nhiệm. Ví dụ:
char a[100] = "Mẫn", b[4] = "tôi";
strcat(a, " và "); strcat(a, b); cout << a // Mẫn và tôi char s[100] , t[100] = "Steve"; strncpy(s, t, 3); s[3] = '\0'; // s = "Ste" strcat(s, "p"); // s = "Step"
cout << t << " goes "<< s << " by " <<s // Steve goes Step by Step
STRCMP(S, T) 4.4.3| 4.4.3|
Hàm so sánh 2 xâu s và t (thay cho các phép toán so sánh). Giá trị trả lại là hiệu hai kí tự kh|c nhau đầu tiên của s và t.:
Nếu s1 < s2: hàm trả lại giá trị âm. -
Nếu s1==s2: hàm trả về giá trị 0. -
Nếu s1 > s2: hàm trả về giá trị dương. -
Trong trường hợp chỉ quan t}m đến so sánh bằng, nếu hàm trả vè giá trị 0 th ̀ hai xâu bằng nhau và nếu giá trị trả vè khác 0 là hai xâu khác nhau.
Ví dụ: if (strcmp(s,t)) cout << "s khác t"; else cout << "s bằng t"; STRCMPI(S, T) 4.4.4|
Như strcmp(s, t) nhưng khơng ph}n biệt chữ hoa, thường. Ví dụ:
char s[] = "H{ Nội" , t[] = "h{ nội";
cout << strcmpi(s, t); // 0 (vì s = t)
STRUPR(S) 4.4.5| 4.4.5|
H{m đổi x}u s th{nh in hoa, v{ cũng trả lại x}u in hoa đó. Ví dụ:
char s[10] = "Ha noi";
Tài liệu giảng dạy Trang 34
cout << s; // HA NOI
STRLWR(S) 4.4.6| 4.4.6|
H{m đổi xâu s thành in thuờng, kết quả trả lại là xâu s. Ví dụ:
char s[10] = "Ha Noi";
cout << strlwr(s); // ha noi cout << s; // ha noi
STRLEN(S) 4.4.7| 4.4.7|
Hàm trả giá trị l{ độ dài của xâu s. Ví dụ:
char s[10] = "Ha Noi";
cout << strlen(s); // 5
TOUPPER 4.4.8| 4.4.8|
Hàm chuyển một ký tự sang chữ hoa Ví dụ:
char ch = ‘a’;
ch = topupper(ch); // ch chuyển th{nh ‘A’
TOLOWER 4.4.1| 4.4.1|
Hàm chuyển một ký tự sang chữ thường Ví dụ:
char ch = ‘A’;
ch = tolower(ch); // ch chuyển th{nh ‘a’ Sau đ}y l{ một số ví dụ sử dụng tổng hợp các hàm trên.
Ví dụ 1 : Thống kê số chữ 'a' xuất hiện trong x}u s.
#include <iostream> using namespace std; int main()
{
const int MAX = 100; char s[MAX + 1]; int count = 0;
//Nhap chuoi ky tu
cout << "Nhap vao chuoi ky tu: "; cin.getline(s, MAX + 1);
//Dem so ky tu
Tài liệu giảng dạy Trang 35 { if (s[i] == 'a') count++; } //In so ky tu
cout << "So ky tu trong chuoi la: " << count << endl; system("pause");
return 0;
}
Kết quả:
Ví dụ : Tính độ d{i x}u bằng c|ch đếm từng kí tự (tương đương với h{m
strlen())
#include <iostream> using namespace std; int main()
{
char s[100]; // độ dài tối đa l{ 99 kí tự
int i = 0;
cin.getline(s, 100); // nhập xâu s
for (i = 0; s[i] != '\0'; i++);// chạy từ đầu đến cuối xâu
cout << "Do dai xau = " << i << endl; system("pause");
return 0;
}
Ví dụ 3 : Sao chép x}u s sang x}u t (tương đương với h{m strcpy(t,s))
#include <iostream> using namespace std; int main() { char s[100], t[100]; cin.getline(s, 100); // nhập xâu s int i = 0;
while ((t[i] = s[i]) != '\0')
i++; // copy cả dấu kết thúc xâu '\0' cout << t << endl;
Tài liệu giảng dạy Trang 36
}