Chúng ta đã làm việc quá nhiều với các kiểu dữ liệu về số như int, float, double…. Tuy nhiên bài toán của chúng ta yêu cầu phải dùng các ký tự (char) hay nhiều ký tự (kiểu chuỗi string) để thực hiện thì sao? Cùng tìm hiểu trong bài hôm nay nhé!

1.Ký tự là gì?

Như đã đề cập trong bài các kiểu dữ liệu căn bản trong C, thì ký tự thực chất cũng là một kiểu dữ liệu có độ lớn là 1byte

Ký tự có thể là các chữ cái (a,b,c…x,y,z) hay là các số(0,1,2…9) ……

Khai báo ký tự trong ngôn ngữ C:

char name = “a”;

Trong đó:

  • Char là kiểu dữ liệu ký tự
  • Name là tên của biến chứa ký tự
  • “a” là ký tự (ta có thể thay thế bằng ký tự khác như b,c,d…x,y,z hay các số 0,1,2,3….9)

Ví dụ tôi khai báo ký tự “n” với tên của biến chứa ký tự đó là ch

#include <stdio.h>
int main(){
    char ch = 'n';
    printf("Ky tu nay la: %c",ch);
    return 0;
}
Ky tu nay la: n

Chú ý là các ký tự đều phải đặt trong dấu “” (ngoặc đơn kép)

Ví dụ tôi khai báo số 7 ở dạng ký tự thì sẽ là:

#include <stdio.h>
int main(){
    char ch = '7';
    printf("Ky tu nay la: %c",ch);
    return 0;
}
Ky tu nay la: 7

Một lưu ý nữa rằng khi số được khai báo trong dấu “” nghĩa là số đó là ký tự và chúng không có các tính chất như một số bình thường (không thể thực hiện các phép tính….)

2.Chuỗi ký tự là gì?

Chuỗi thức chất là một mảng chứa nhiều các ký tự đơn lẻ và có phần từ cuối cùng trong chuỗi là một giá trị null có ký tự “\0” được hiểu là ký tự cách

Ví dụ tôi có chuỗi Xin chao

x i n \0 c h a o \0

Ký tự “\0” ở đây có nghĩa là dấu cách (một khoảng trống)

Khai báo chuỗi

char name[size] = “chuoikytu”;

Trong đó:

  • Char là kiểu dữ liệu ký tự
  • Name là tên của mảng chứa chuỗi ký tự
  • “chuoikytu” là nội dung ta cần khai báo ở trong đó
  • Size là độ dài của chuỗi gồm bao nhiêu ký tự (tính cả ký tự “\0”)

Ví dụ dưới đây tôi khai báo chuỗi có tên là ch với nội dung “Xin chao” và có độ dài là 9 ký tự

#include <stdio.h>
int main(){
    char ch[9] = "Xin chao";
    printf("%s",ch);
    return 0;
}
Xin chao

Tại sao lại là 9 ký tự?? Cùng xem giải thích bên dưới nhé:

x i n \0 c h a o \0

Ta thấy rằng “xin” (có 3 ký tự) rồi đến dấu cách ( có 1 ký tự) rồi đến “chao” (có 4 ký tự) và cuối cùng ký tự kết thúc là dấu cách (có 1 ký tự )

Như vậy để thực hiện được chuỗi trên thì cần đưa vào size là 9

3.Chuỗi các ký tự thực chất là mảng?

Tôi có một chuỗi ký tự như sau

#include <stdio.h>
#include <string.h>
int main ()
{
   char  ch[18] = "Toi yeu lap trinh";
   puts(ch);
}
Toi yeu lap trinh

Tôi có thể truy cập vào địa chỉ để lấy ra các giá trị của chuỗi ch trên như sau

Ở ví dụ dưới đây tôi lấy ra ký tự đầu tiên và ký tự cuối cùng của chuỗi trên

#include <stdio.h>
#include <string.h>
int main ()
{
   char  ch[18] = "Toi yeu lap trinh";
   puts(ch);
   printf("Ky tu dau tien cua chuoi: %c",ch[0]);
   printf("\nKy tu cuoi cung cua chuoi: %c",ch[16]);
}
Toi yeu lap trinh

Ky tu dau tien cua chuoi: T

Ky tu cuoi cung cua chuoi: h

Ta cũng có thể sử dụng một số quy tắc của mảng để áp dụng cho chuỗi ký tự trên, ví dụ như sử dụng phép gán

#include <stdio.h>
#include <string.h>
int main ()
{
   char  ch[18] = "Toi yeu lap trinh";
   puts(ch);
   ch[0] = 't';
   ch[16] = 'H';
   puts(ch);
   printf("Ky tu dau tien cua chuoi: %c",ch[0]);
   printf("\nKy tu cuoi cung cua chuoi: %c",ch[16]);
}
Toi yeu lap trinh

toi yeu lap trinH

Ky tu dau tien cua chuoi: t

Ky tu cuoi cung cua chuoi: H

Tôi đã gán giá trị đầu tiên của chuỗi thành ký tự ‘t’ và ký tự cuối cùng của chuỗi bằng ký tự ‘H’

Ví dụ dưới đây thực hiện lặp qua tất cả các ký tự của chuỗi bằng vòng lặp

#include <stdio.h>
#include <string.h>
int main ()
{
   char  ch[18] = "Toi yeu lap trinh";
   puts(ch);
   for(int i = 0; i < 18; i++){
         printf("Ky tu thu %d cua chuoi: %c \n",i,ch[i]);
   }
}
Toi yeu lap trinh

Ky tu thu 0 cua chuoi: T

Ky tu thu 1 cua chuoi: o

Ky tu thu 2 cua chuoi: i

Ky tu thu 3 cua chuoi:

Ky tu thu 4 cua chuoi: y

Ky tu thu 5 cua chuoi: e

Ky tu thu 6 cua chuoi: u

Ky tu thu 7 cua chuoi:

Ky tu thu 8 cua chuoi: l

Ky tu thu 9 cua chuoi: a

Ky tu thu 10 cua chuoi: p

Ky tu thu 11 cua chuoi:

Ky tu thu 12 cua chuoi: t

Ky tu thu 13 cua chuoi: r

Ky tu thu 14 cua chuoi: i

Ky tu thu 15 cua chuoi: n

Ky tu thu 16 cua chuoi: h

Ky tu thu 17 cua chuoi: