Lập trình C: Hàm xử lý ký tự (Character)
Có rất nhiều hàm có sẵn trong ngôn ngữ C được sử dụng để xác thực kiểu dữ liệu của biến đã cho và để chuyển đổi chữ hoa thành chữ thường, chữ thường thành chữ hoa.
Dưới đây ta sẽ tìm hiểu các hàm xử lý ký tự phổ biến của ngôn ngữ C thông qua mô tả và ví dụ đơn giản. Lưu ý những hàm xử lý/thao tác với ký tự này thuộc thư viện <ctype.h> nên ta cần khai báo thư viện này trước khi sử dụng.
1. isalpha()
Hàm này dùng để kiểm tra xem ký tự có phải là ký tự trong bảng chữ cái hay không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[10] = "Aa9$2@"; printf("\n%d", isalpha(s[0]));//trả về 1 printf("\n%d", isalpha(s[1]));//trả về 2 printf("\n%d", isalpha(s[2]));//trả về 0 printf("\n%d", isalpha(s[3]));//trả về 0 return 0; }
2. isdigit()
Hàm isdigit() dùng để kiểm tra xem ký tự có phải là chữ số không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[10] = "Aa9$2@"; printf("\n%d", isdigit(s[0]));//trả về 0 printf("\n%d", isdigit(s[1]));//trả về 0 printf("\n%d", isdigit(s[2]));//trả về 1 printf("\n%d", isdigit(s[3]));//trả về 0 return 0; }
3. isalnum()
Hàm này dùng để kiểm tra xem ký tự có phải là chữ và số hay không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[10] = "Aa0$2@"; printf("\n%d", isalnum(s[0]));//trả về 1 printf("\n%d", isalnum(s[1]));//trả về 2 printf("\n%d", isalnum(s[2]));//trả về 4 printf("\n%d", isalnum(s[3]));//trả về 0 return 0; }
4. isspace()
Hàm này dùng để kiểm tra xem ký tự có phải là dấu cách hay không, nếu đúng trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[10] = " a $2@"; printf("\n%d", isspace(s[0]));//trả về 8 printf("\n%d", isspace(s[1]));//trả về 0 printf("\n%d", isspace(s[2]));//trả về 8 printf("\n%d", isspace(s[3]));//trả về 0 return 0; }
5. islower()
Kiểm tra xem ký tự có phải là chữ thường (a-z) không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[10] = "Aa9$2@"; printf("\n%d", islower(s[0]));//trả về 0 printf("\n%d", islower(s[1]));//trả về 2 printf("\n%d", islower(s[2]));//trả về 0 printf("\n%d", islower(s[3]));//trả về 0 return 0; }
6. isupper()
Kiểm tra xem ký tự có phải là chữ hoa (A-Z) không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[10] = "Aa9$2@"; printf("\n%d", isupper(s[0]));//trả về 1 printf("\n%d", isupper(s[1]));//trả về 0 printf("\n%d", isupper(s[2]));//trả về 0 printf("\n%d", isupper(s[3]));//trả về 0 return 0; }
7. isxdigit()
Hàm này dùng để kiểm tra xem ký tự có phải là hệ thập lục (hệ 16 - hexadecimal) không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[10] = "Aa9$2@"; printf("\n%d", isxdigit(s[0]));//trả về 128 printf("\n%d", isxdigit(s[1]));//trả về 128 printf("\n%d", isxdigit(s[2]));//trả về 128 printf("\n%d", isxdigit(s[3]));//trả về 0 return 0; }
8. iscntrl()
Hàm này dùng để kiểm tra xem ký tự có phải là ký tự điều khiển (\n, \t, \r, \a, \f, ...) hay không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[30] = "A\n9\t2\r@\aa\f"; printf("\n%d", iscntrl(s[0]));//trả về 0 printf("\n%d", iscntrl(s[1]));//trả về 32 printf("\n%d", iscntrl(s[2]));//trả về 0 printf("\n%d", iscntrl(s[3]));//trả về 32 printf("\n%d", iscntrl(s[4]));//trả về 0 printf("\n%d", iscntrl(s[5]));//trả về 32 printf("\n%d", iscntrl(s[6]));//trả về 0 printf("\n%d", iscntrl(s[7]));//trả về 32 printf("\n%d", iscntrl(s[8]));//trả về 0 printf("\n%d", iscntrl(s[9]));//trả về 32 return 0; }
9. isprint()
Hàm này dùng để kiểm tra xem ký tự có phải là ký tự in được hay không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[30] = "A\n9\t2\r@\aa\f"; printf("\n%d", isprint(s[0]));//trả về 1 printf("\n%d", isprint(s[1]));//trả về 0 printf("\n%d", isprint(s[2]));//trả về 4 printf("\n%d", isprint(s[3]));//trả về 0 printf("\n%d", isprint(s[4]));//trả về 4 printf("\n%d", isprint(s[5]));//trả về 0 printf("\n%d", isprint(s[6]));//trả về 16 printf("\n%d", isprint(s[7]));//trả về 0 printf("\n%d", isprint(s[8]));//trả về 2 printf("\n%d", isprint(s[9]));//trả về 0 return 0; }
10. ispunct()
Hàm này dùng để kiểm tra xem ký tự có phải dấu câu hay không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[30] = "A,b;1.@:2!$#%^&*(-+"; printf("\n%d", ispunct(s[0]));//trả về 0 printf("\n%d", ispunct(s[1]));//trả về 16 printf("\n%d", ispunct(s[2]));//trả về 0 printf("\n%d", ispunct(s[3]));//trả về 16 printf("\n%d", ispunct(s[4]));//trả về 0 printf("\n%d", ispunct(s[5]));//trả về 16 printf("\n%d", ispunct(s[6]));//trả về 16 printf("\n%d", ispunct(s[7]));//trả về 16 printf("\n%d", ispunct(s[8]));//trả về 0 printf("\n%d", ispunct(s[9]));//trả về 16 printf("\n%d", ispunct(s[10]));//trả về 16 printf("\n%d", ispunct(s[11]));//trả về 16 printf("\n%d", ispunct(s[12]));//trả về 16 printf("\n%d", ispunct(s[13]));//trả về 16 printf("\n%d", ispunct(s[14]));//trả về 16 printf("\n%d", ispunct(s[15]));//trả về 16 printf("\n%d", ispunct(s[16]));//trả về 16 printf("\n%d", ispunct(s[17]));//trả về 16 printf("\n%d", ispunct(s[18]));//trả về 16 return 0; }
11. isgraph()
Hàm này dùng để kiểm tra xem ký tự có phải là ký tự đồ họa hay không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[30] = "A1 b2 $3 c d\t e\r x\a y\n"; printf("\n%d", isgraph(s[0]));//trả về 1 printf("\n%d", isgraph(s[1]));//trả về 4 printf("\n%d", isgraph(s[2]));//trả về 0 printf("\n%d", isgraph(s[3]));//trả về 2 printf("\n%d", isgraph(s[4]));//trả về 4 printf("\n%d", isgraph(s[5]));//trả về 0 printf("\n%d", isgraph(s[6]));//trả về 16 printf("\n%d", isgraph(s[7]));//trả về 4 printf("\n%d", isgraph(s[8]));//trả về 0 printf("\n%d", isgraph(s[9]));//trả về 2 printf("\n%d", isgraph(s[10]));//trả về 0 printf("\n%d", isgraph(s[11]));//trả về 2 printf("\n%d", isgraph(s[12]));//trả về 0 printf("\n%d", isgraph(s[13]));//trả về 0 printf("\n%d", isgraph(s[14]));//trả về 2 printf("\n%d", isgraph(s[15]));//trả về 0 printf("\n%d", isgraph(s[16]));//trả về 0 printf("\n%d", isgraph(s[17]));//trả về 2 printf("\n%d", isgraph(s[18]));//trả về 0 printf("\n%d", isgraph(s[19]));//trả về 0 printf("\n%d", isgraph(s[20]));//trả về 2 printf("\n%d", isgraph(s[21]));//trả về 0 return 0; }
12. isascii()
Hàm này dùng để kiểm tra xem ký tự có phải là ký tự ASCII hay không, nếu phải sẽ trả về một số khác 0, ngược lại sẽ trả về 0.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char s[30] = "Â1 b2 $3 c d\t e\r x\a y\nƯ"; printf("\n%d", isascii(s[0]));//trả về 0 printf("\n%d", isascii(s[1]));//trả về 0 printf("\n%d", isascii(s[2]));//trả về 1 printf("\n%d", isascii(s[3]));//trả về 1 printf("\n%d", isascii(s[4]));//trả về 1 printf("\n%d", isascii(s[5]));//trả về 1 printf("\n%d", isascii(s[6]));//trả về 1 printf("\n%d", isascii(s[7]));//trả về 1 printf("\n%d", isascii(s[8]));//trả về 1 printf("\n%d", isascii(s[9]));//trả về 1 printf("\n%d", isascii(s[10]));//trả về 1 printf("\n%d", isascii(s[11]));//trả về 1 printf("\n%d", isascii(s[12]));//trả về 1 printf("\n%d", isascii(s[13]));//trả về 1 printf("\n%d", isascii(s[14]));//trả về 1 printf("\n%d", isascii(s[15]));//trả về 1 printf("\n%d", isascii(s[16]));//trả về 1 printf("\n%d", isascii(s[17]));//trả về 1 printf("\n%d", isascii(s[18]));//trả về 1 printf("\n%d", isascii(s[19]));//trả về 1 printf("\n%d", isascii(s[20]));//trả về 1 printf("\n%d", isascii(s[21]));//trả về 1 printf("\n%d", isascii(s[22]));//trả về 1 printf("\n%d", isascii(s[23]));//trả về 0 return 0; }
13. tolower()
Hàm này sẽ trả về ký tự in thường của ký tự tương ứng, nếu ký tự không phải là ký tự hoa thì sẽ trả về đúng ký tự đó, nhưng ký tự gốc không thay đổi giá trị (vẫn giữ nguyên giá trị như ban đầu trong biến).
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char c1 = 'A', c2 = 'b', c3 = '@'; printf("\n%c", tolower(c1));//in ra a printf("\n%c", c1); //in ra A printf("\n%c", tolower(c2));//in ra b printf("\n%c", c2); //in ra b printf("\n%c", tolower(c3));//in ra @ printf("\n%c", c3); //in ra @ return 0; }
14. toupper()
Hàm này sẽ trả về ký tự in hoa của ký tự tương ứng, nếu ký tự không phải là ký tự thường thì sẽ trả về đúng ký tự đó, ký tự gốc không thay đổi giá trị (vẫn giữ nguyên giá trị như ban đầu trong biến).
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char c1 = 'A', c2 = 'b', c3 = '@'; printf("\n%c", toupper(c1));//in ra A printf("\n%c", c1); //in ra A printf("\n%c", toupper(c2));//in ra B printf("\n%c", c2); //in ra b printf("\n%c", toupper(c3));//in ra @ printf("\n%c", c3); //in ra @ return 0; }
15. toascii()
Hàm này sẽ trả về ký tự tương ứng của vị trí tương ứng trong bảng mã ASCII.
Ví dụ:
#include<stdio.h> #include<ctype.h> int main(){ char c1 = 65, c2 = 98, c3 = 64; printf("\n%c", toascii(c1));//in ra A printf("\n%c", c1); //in ra A printf("\n%c", toascii(c2));//in ra b printf("\n%c", c2); //in ra b printf("\n%c", toascii(c3));//in ra @ printf("\n%c", c3); //in ra @ return 0; }