Chuỗi ký tự là gì? Cách khởi tạo và một số kỹ thuật lập trình trên chuỗi

Đây là bài 30/43 bài của series môn học Nhập môn lập trình

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ự
Ký tự null của chuỗi

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'

Khai báo mảng ký tự

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'

Khai báo mảng ký tự

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 st, 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.

4.7/5 - (4 bình chọn)
Bài trước và bài sau trong môn học<< Các kỹ thuật lập trình với mảng một chiều và minh họa với C++Lớp string trong C++ và các hàm thường dùng của lớp string >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.