Chúng ta thường thấy mảng lưu trữ các giá trị kiểu số (int, float,…). Mảng cũng có thể lưu trữ các giá trị kiểu ký tự. Bài này sẽ giới thiệu cách khai báo, khởi tạo và kỹ thuật lập trình trên mảng ký tự.
1. Như thế nào là chuỗi ký tự?
Kiểu char chỉ chứa được một ký tự. Để lưu trữ một chuỗi ký tự (nhiều ký tự), ta sử dụng mảng (một chiều) các ký tự. Tức là, chuỗi ký tự (mảng ký tự) là mảng một chiều mà tất cả các phần tử trong mảng có kiểu ký tự (char).
Cú pháp khai báo
char <tên chuỗi >[<kích thước>];
Lưu ý: Mảng ký tự kết thúc bằng ký tự ‘\0’ (null). Do đó, độ dài chuỗi bằng 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ự
2. Khởi tạo chuỗi ký tự
Khởi tạo như khởi tạo mảng thông thường:
Chuỗi ký tự có độ dài xác định trước
char s[10] = {'T', 'H', 'C', 'S', ' ', 'A', '\0'};
char s[10] = "THCS A"; //tự động thêm ký tự null '\0'
Chuỗi ký tự tự động xác định độ dài
char s[] = {'T', 'H', 'C', 'S', ' ', 'A', '\0'};
char s[] = "THCS A"; //tự động thêm ký tự null '\0'
Lưu ý: Khai báo ký tự dùng cặp dấy nháy đơn. Khai báo chuỗi dùng cặp dấu nháy kép. Ví dụ:
char ky_tu = 'a';
char chuoi[5] = "abc";
Nhập xuất chuỗi ký tự
Sử dụng lệnh cin để nhập mảng ký tự. Sử dụng lệnh cout để xuất mảng ký tự.
char cChuoi[10];
cin >> cChuoi;
cout << cChuoi;
Nhập mảng ký tự bằng lệnh cin chỉ nhận các ký tự từ bàn phím đến khi gặp ký tự khoảng trắng hoặc ký tự xuống dòng.
#include <iostream>
using namespace std;
int main() {
char arCh[50];
cout<<"Input character sequences:";
cin>>arCh;
cout<<"Character sequences received:";
cout<<arCh;
system("pause");
}
Kết quả
Input character sequences:introduction to programming
character sequences received:introduction
Rõ ràng, chuỗi nhập vào chỉ nhận được “introduction”, từ khoảng trắng trở về sau không nhận được. Để khắc phục, ta sử dụng lệnh cin.getline(<tên biến chuỗi>, <số ký tự nhận được>);. Từ đây về sau, khi nhập chuỗi nên dùng lệnh cin.getline.
#include <iostream>
using namespace std;
int main() {
char arCh[50];
cout<<"Input character sequences:";
cin.getline(arCh,50);
cout<<"Character sequences received:";
cout<<arCh;
system("pause");
}
Kết quả
Input character sequences:introduction to programming
Character sequences received:introduction to programming
3. Các hàm xử lý chuỗi ký tự
Ngôn ngữ C++ cung cấp nhiều hàm cho việc thao tác với chuỗi. Dưới đây là một số hàm xử lý chuỗi thường dùng:
Hàm strlen(char s[])
Trả về chiều dài chuỗi s
char cLine[40] = "Have a nice day!";
int iLength;
iLength = strlen(cLine);//16
Hàm strcat(char s1[], char s2[])
Nối chuỗi s2 vào cuối chuỗi s1.
char str1[25] ="Hello ";
char str2[11] = "World";
strcat(str1,str2);//Hello World
Hàm cin.ignore(int n, char ch)
Bỏ qua n ký tự trước khi gặp ký tự ch trong bộ nhớ đệm. Thường dùng trước lệnh cin.getline().
cin.ignore(200,'\n');
Hàm cin.getline(char s[], int n)
Đọc từ 1 tới n ký tự và lưu vào s.
char cLine[50];
cin.getline(cLine,50);
Hàm isalpha(char ch)
Kiểm tra giá trị trong ch có phải là chữ cái hay không.
Hàm isdigit(char ch)
Kiểm tra giá trị trong ch có phải chữ số hay không.
Hàm isspace(char ch)
Kiểm tra giá trị trong ch có phải khoảng trắng hay không.
Hàm strlwr(char s[])
Đổi tất cả ký tự của s sang chữ thường.
Hàm strupr(char s[])
Đổi tất cả ký tự của s sang chữ hoa.
Hàm strcmp(char s[], char t[])
So sánh 2 chuỗi s và t, trả về giá trị âm nếu s<t, 0 nếu s bằng t, giá trị dương nếu s>t.
Hàm strcpy(char s[], char t[])
Gán nội dung của chuỗi t cho chuỗi s.