Cùng tìm hiểu khái niệm về xâu ký tự; khai báo và sử dụng xâu; một số hàm làm việc với ký tự và xâu ký tự trong C được trình bày cụ thể trong Bài giảng Tin học đại cương Phần 2: Bài 6 - Xâu ký tự.
Trang 1TIN HỌC ĐẠI CƯƠNG
PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C
BÀI 6: XÂU KÝ TỰ
2
6.1 Khái niệm xâu ký tự
6.2 Khai báo và sử dụng xâu
6.3 Một số hàm làm việc với ký tự và xâu
ký tự trong C.
6.3.1 Các hàm xử lý ký tự
6.3.2 Các hàm xử lý xâu ký tự
6.3.3 Một số hàm xử lý xâu ký tự khác
6.3.4 Con trỏ và xâu ký tự
Trang 26.1 Khái niệm xâu ký tự
Là một dãy các kí tự viết liên tiếp nhau.
Xâu rỗng: Xâu không gồm kí tự nào cả.
Độ dài xâu: Số kí tự có trong xâu.
Ví dụ:
“Tin hoc” là một xâu kí tự gồm 7 kí tự: ‘T’, ‘i’, ‘n’, dấu
cách (‘ ‘), ‘h’, ‘o’, và ‘c’
Lưu trữ xâu ký tự:
Ký tự kết thúc xâu: NULL hoặc ’ Ký tự kết thúc xâu: NULL hoặc ’\\0’ 0’.
6.1 Khái niệm xâu ký tự
6.2 Khai báo và sử dụng xâu
6.3 Một số hàm làm việc với ký tự và xâu
ký tự trong C.
6.3.1 Các hàm xử lý ký tự
6.3.2 Các hàm xử lý xâu ký tự
Trang 36.2.1 Khai báo xâu ký tự
Cú pháp:
char ten_xau [so_ky_tu_toi_da];
Ví dụ:
char ho_va_ten[20];
6
6.2.2 Truy cập vào một phần tử của xâu
Cú pháp:
ten_xau[chi_so_ky_tu_can_truy_cap]
Ví dụ:
char que_quan[10] = “ “Ha noi Ha noi” ”; ;
Trang 46.1 Khái niệm xâu ký tự
6.2 Khai báo và sử dụng xâu
6.3 Một số hàm làm việc với ký tự và xâu
ký tự trong C.
6.3.1 Các hàm xử lý ký tự
6.3.2 Các hàm xử lý xâu ký tự
6.3.3 Một số hàm xử lý xâu ký tự khác
6.3.4 Con trỏ và xâu ký tự
6.3.1 Các hàm xử lý ký tự
Để sử dụng các hàm này ta khai báo tệp tiêu đề
ctype.h.
Chuyển một kí tự chữ cái thường (các kí tự 'a', 'b', …, 'z')
thành kí tự chữ cái hoa tương ứng ('A', 'B', …, 'Z')
Chuyển một kí tự chữ cái hoa ('A', 'B', …, 'Z') thành kí tự chữ
cái thường tương ứng ('a', 'b', …'z')
Kiểm tra một kí tự có phải là chữ cái hay không ('a', 'b', …,
Trang 56.3.1 Các hàm xử lý ký tự (tiếp)
int isdigit(int ch)
Kiểm tra một kí tự có phải là chữ số hay không ('0', '1', …'9')
Hàm trả về giá trị khác không nếu đúng, trả về giá trị 0 nếu
ngược lại
int islower(int ch)
Kiểm tra một kí tự có phải là chữ cái thường hay không ('a', 'b',
…'z')
Hàm trả về giá trị khác không nếu đúng, trả về giá trị 0 nếu
ngược lại
int isupper(int ch)
Kiểm tra một kí tự có phải là chữ cái hoa hay không ('A', 'B',
…'Z')
Hàm trả về giá trị khác không nếu đúng, trả về giá trị 0 nếu
ngược lại
10
6.3.1 Các hàm xử lý ký tự (tiếp)
int iscntrl(int ch)
Kiểm tra một kí tự có phải là kí tự điều khiển hay
không (là các kí tự không hiển thị được và có mã
ASCII từ 0 đến 31).
Hàm trả về giá trị khác không nếu đúng, trả về giá trị
0 nếu ngược lại.
int isspace(int ch)
Kiểm tra một kí tự có phải là dấu cách (space, mã
ASCII là 32), kí tự xuống dòng ('
ASCII là 32), kí tự xuống dòng ('\\n', mã ASCII là 10), n', mã ASCII là 10),
kí tự về đầu dòng ('
kí tự về đầu dòng ('\\r', mã ASCII là 13), dấu tab ngang r', mã ASCII là 13), dấu tab ngang
('
('\\t', mã ASCII là 9) hay dấu tab dọc (' t', mã ASCII là 9) hay dấu tab dọc ('\\v', mã ASCII là v', mã ASCII là
11) hay không.
Hàm trả về giá trị khác không nếu đúng, trả về giá trị
0 nếu ngược lại
Trang 66.3.2 Các hàm xử lý xâu ký tự
Vào ra dữ liệu
Vào ra dữ liệu trên xâu kí tự tức là nhập dữ liệu cho
xâu và hiển thị dữ liệu chứa trong xâu.
Khai báo thư viện <stdio.h>.
scanf() hoặc hoặc gets() gets()
scanf(“%s”, ten_xau);
gets(ten_xau);
printf() hoặc hoặc puts() puts()
printf(“%s”, ten_xau);
puts(ten_xau);
6.3.2 Các hàm xử lý xâu ký tự
Ví dụ: Nhập vào một chuỗi và hiển thị trên màn
hình chuỗi vừa nhập
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char ten[12];
printf("Nhap chuoi: "); gets(ten);
printf("Chuoi vua nhap: "); puts(ten);
Trang 76.3.3 Một số hàm xử lý xâu ký tự khác
size_t strlen(char* tên_xâu);
Trả về độ dài (số kí tự có trong xâu) của xâu kí tự tên_xâu
char* strcpy(char* xâu_đích, char* xâu_nguồn)
Sao chép nội dung xâu_nguồn và ghi lên xâu_đích
int strcmp(char* xâu_thứ_nhất, char* xâu_thứ_hai);
TrảTrả vềvề
giá trị trị < 0 < 0 nếu nếu xâu_thứ_nhất xâu_thứ_nhất nhỏ nhỏ hơn hơn xâu_thứ_hai xâu_thứ_hai
giá trị trị 0 0 nếu nếu xâu_thứ_nhất xâu_thứ_nhất bằng bằng xâu_thứ_hai xâu_thứ_hai
giá trị trị > 0 > 0 nếu nếu xâu_thứ xâu_thứ _ _nhất nhất lớn lớn hơn hơn xâu_thứ_hai xâu_thứ_hai
char*
char* strcat strcat(char* (char* xâu_đích xâu_đích, char* , char* xâu_nguồn xâu_nguồn); );
Ghépnốinối xâu_nguồnxâu_nguồn vàovào ngayngay sausauxâu_đíchxâu_đích
KếtKết quảquả trảtrả vềvề củacủa hàmhàm strcatstrcat() () làlà xâuxâumớimới ghépghépnốinối từtừ 2 2 xâuxâu
xâu_nguồn
xâu_nguồn vàvàxâu_đíchxâu_đích
14
6.3.3 Một số hàm xử lý xâu ký tự khác
char* strchr(char* str, int ch);
Tìm kiếm vị trí của kí tự ch trong xâu str
Nếu có kí tự ch trong str thì hàm strchr() trả về con trỏ trỏ tới kí
tự ch đầu tiên trong str, ngược lại nó sẽ trả về con trỏ NULL
char* strstr(char* str1, char* str2);
Tìm kiếm vị trí của xâu con str2 trong xâu str1
Nếu str2 là xâu con của str1 thì hàm strstr() trả về con trỏ trỏ tới
kí tự đầu tiên của xâu con str2 đầu tiên trong str1, ngược lại nó
sẽ trả về con trỏ NULL
int atoi(char* str)
Chuyển một xâu kí tự là biểu diễn của một số nguyên thành số
nguyên tương ứng
Nếu chuyển đổi thành công, hàm atoi() trả về giá trị số nguyên
chuyển đổi được, ngược lại trả về giá trị 0
Trang 8Ví dụ dụ 1 1
#include <
#include <stdio.h stdio.h> >
#include <
#include <conio.h conio.h> >
#include <
#include <string.h string.h> >
char
char xau xau[100]; [100];
int nua nua, , dai dai, ok; , ok;
void main()
{{
clrscr
clrscr(); ();
printf
printf("Hay ("Hay nhap nhap vao vao mot mot xau xau:"); :");
scanf
scanf("% ("%s",&xau s",&xau); );
dai
dai= =strlen strlen((xau xau); // ); //Chiều Chiều dài dài của của xâu xâu
nua
nua= =dai dai/2; // /2; // Một Một nửa nửa chiều chiều dài dài
15
Ví dụ dụ 1 ( 1 (tiếp tiếp))
ok=1; //mặc mặc định định là là xâu xâu đối đối xứng xứng
for(
for(int int ii=0;i< =0;i<nua;i nua;i++) ++)
if (
if (xau xau[[ii] != ] != xau xau[dai [dai 1 1 i]) i])
{ ok=0; break;}
if (ok)
if (ok) printf printf (" ("Xau Xau %s la %s la doi doi xung",xau xung",xau); );
else
else printf printf(" ("Xau Xau %s la KHONG %s la KHONG doi doi
xung",xau
xung",xau); );
Trang 9Ví dụ dụ 2: 2:
#include <
#include <stdio.hstdio.h>>
#include <
#include <conio.hconio.h>>
#include <
#include <string.hstring.h>> // // PhaiPhai co co thuthu vienvien string.hstring.h thithi moimoi
//
// susu dung dung duocduoc caccac ham ham strcpystrcpy, , strcmpstrcmp
void main()
{{
char str1[10] = “
char str1[10] = “abcabc”;”;
char str2[10] = “def”;
clrscr
clrscr();();
printf
printf(“ str1: %s”,str1);(“ str1: %s”,str1);
printf
printf(“(“\\n str2: %s”,str2);n str2: %s”,str2);
printf(“
printf(“\\n strcmp(str1,str2) = %d”,strcmp(str1,str2));n strcmp(str1,str2) = %d”,strcmp(str1,str2));
printf
printf(“(“\\n n strcatstrcat(str1,str2) = %(str1,str2) = %s”,strcats”,strcat(str1,str2));(str1,str2));
17
Ví dụ dụ 2 ( 2 (tiếp tiếp))
printf
printf(“ (“\\n str1: %s”,str1); n str1: %s”,str1);
printf
printf(“ (“\\n str2: %s”,str2); n str2: %s”,str2);
printf
printf(“ (“\\n n strcpy strcpy(str1,str2) = % (str1,str2) = %s”,strcpy s”,strcpy(str1,str2)); (str1,str2));
printf
printf(“ (“\\n str1: %s”,str1); n str1: %s”,str1);
printf
printf(“ (“\\n str2: %s”,str2); n str2: %s”,str2);
strcpy
strcpy(str1,”ab”); (str1,”ab”);
strcpy
strcpy(str2,”abc”); (str2,”abc”);
printf
printf(“ (“\\n n strcmp strcmp(str1,str2) = % (str1,str2) = %d”,strcmp d”,strcmp(str1,str2)); (str1,str2));
getch
getch(); ();
}}
18
Trang 10Ví dụ dụ 2 ( 2 (tiếp tiếp))
19
Câu hỏi?