50 ký tự là gì

Chào các bạn, trong bài viết này, ta sẽ cùng nhau tìm hiểu về kiểu dữ liệu ký tự. Liệu kiểu dữ liệu ký tự có gì giống, khác so với kiểu dữ liệu số? Khi xài kiểu ký tự cần lưu ý các đặc điểm nào? Các kiến thức cơ bản về kiểu ký tự?

Cùng nhau đọc bài viết này và các bạn sẽ có được sự nhìn nhận cơ bản về

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
0

Ký tự là gì?

Ký tự character (ký hiệu trong c++ là char) là 1 kiểu dữ liệu có kích thước là

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
1

Ký tự trong c++ được hiểu là ký tự trong bảng mã

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
2.

                                   BANG MA ASCII

     -----------------------------------------------------------------------------

     32      33 !    34 "    35 #    36 $    37 %    38 &    39 '    40 (    41 )
     42 *    43 +    44 ,    45 -    46 .    47 /    48 0    49 1    50 2    51 3
     52 4    53 5    54 6    55 7    56 8    57 9    58 :    59 ;    60 <    61 =
     62 >    63 ?    64 @    65 A    66 B    67 C    68 D    69 E    70 F    71 G
     72 H    73 I    74 J    75 K    76 L    77 M    78 N    79 O    80 P    81 Q
     82 R    83 S    84 T    85 U    86 V    87 W    88 X    89 Y    90 Z    91 [
     92 \    93 ]    94 ^    95 _    96 `    97 a    98 b    99 c    100 d   101 e
     102 f   103 g   104 h   105 i   106 j   107 k   108 l   109 m   110 n   111 o
     112 p   113 q   114 r   115 s   116 t   117 u   118 v   119 w   120 x   121 y
     122 z   123 {   124 |   125 }   126 ~

Ký tự thứ 32 là ký tự khoảng trắng.

Kiểu ký tự char luôn được đặt ở giữa 2 dấu nháy đơn

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
3 .

Cách khai báo kiểu ký tự cũng giống như khai báo kiểu dữ liệu số:

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'

Ký tự trong c++ khi được lưu trữ vào bộ nhớ máy sẽ được lưu như kiểu số nguyên, và khi in ra màn hình sẽ chuyển về dạng ký tự rồi xuất ra, tức là:

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
a 97

Chính vì vậy, ta có thể cộng kiểu ký tự với 1 số nguyên n, kết quả xuất ra là ký tự mang mã số của ký tự đầu cộng với n trong bảng mã ASCII:

int main() {
    char kytu = 'a';
    cout << "Ky tu nhap vao la: " << kytu;

    kytu = kytu + 1;                        // kytu = 'a' + 1 = 97 + 1 = 98 = 'b'

    cout << "Ky tu sau khi them 1 don vi: " << kytu;            
}
Ky tu nhap vao la: a
Ky tu sau khi them 1 don vi: b

Mảng ký tự

Mảng ký tự là tập hợp các ký tự một cách tuần tự, bên trong dấu ngoặc kép

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
4

Để khai báo mảng ký tự, ta có thể khai báo bằng từ khóa

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
5 trong thư viện
int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
6 hoặc từ khóa char ten_bien [so_luong_phantu].

include 
include            //Khai báo thư viện cho kiểu dữ liệu string

using namespace std;

int main() {
    string mang1;
    char mang2[100];
    char mang3[] = "kieu ky tu";
}

Tính số lượng phần tử có trong mảng

Để khai báo số ký tự có trong mảng, ta sử dụng hàm

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
7 có sẵn trong thư viện
int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
6.

#include 
#include 

using namespace std;

int main() {
    char a[] = "abcdef";
    cout << strlen(a);          // Chương trình xuất ra giá trị 6
}

Ta cần phân biệt rõ 2 khái niệm là số phần tử của mảng, và số ký tự có trong mảng. Ta có khai báo sau:

#include 
#include 

using namespace std;

int main() {
    char a[15] = "abcd";
    cout << "Kich co mang a: " << sizeof(a) << endl;
    cout << "So ky tu trong a: " << strlen(a);           
}
Kich co mang a: 15
So ky tu trong a: 4

Trong đó hàm

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
9 là số lượng phần tử có trong mảng, sẽ bao gồm phần tử rỗng và phần tử ký tự, còn hàm
int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
7 sẽ chỉ tính các phần tử ký tự.

Vậy nếu ta bị cấm sử dụng thư viện

int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
6 thì sao?

Chúng ta có thể sử dụng vòng lặp, vậy thì điều kiện để kết thúc vòng lặp là khi nào?

Trước tiên, ta cần tìm hiểu về ký tự

a 97
2.

Ký tự Null

Ký tự

a 97
2, ký hiêu là
a 97
4, đây là ký tự báo hiệu kết thúc chuỗi, VD ta có khai báo sau
a 97
5. Khi đó chương trình sẽ tự động chèn ký tự
a 97
4 vào cuối mảng, mảng sẽ có dạng như sau:

a01234Ký tự'a''b''c''d''\0'

Vậy khi khai báo 1 mảng có n ký tự, thì ta phải khai báo thêm 1 ký tự, tức là n+1 phần tử vào mảng để chừa 1 chỗ cho ký tự

a 97
4, nếu không có ký tự
a 97
4 thì khi in ra màn hình mảng sẽ có lỗi:

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
0
char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
1

Để khắc phục, t có thể chèn thêm ký tự

a 97
4 vào cuối.

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
2
char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
3

Trở lại vấn đề trên, bây giờ ta đã biết ở cuối mỗi mảng sẽ có ký tự

a 97
4 báo hiệu kết thúc mảng, vậy thì vòng lặp của chúng ta sẽ có dạng như sau:

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
4

Nhập vào mảng ký tự

Phương phức nhập mảng ký tự không giống nhập mảng trong kiểu số, phải nhập từng phần tử, đơn giản hơn nó giống như phương thức nhập một biến kiểu dữ liệu số. 

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
5

Nhưng có vấn đề với việc nhập mảng có chứa khoảng trắng.

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
6

Nếu ta chỉ dùng hàm nhập cin thì khi gặp dấu cách, chương trình sẽ tự hiểu là kết thúc mảng, và đưa toàn bộ mảng phía sau dấu cách vào bộ nhớ đệm. Nếu phía sau lại là câu lệnh nhập chuỗi ký tự thì các ký tự trong bộ nhớ sẽ chuyển vào mảng phía sau

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
7

Để giải quyết vấn đề này, ta có thể sử dụng câu lệnh

int main() {
    char kytu = 'a';
    cout << "Ky tu nhap vao la: " << kytu;

    kytu = kytu + 1;                        // kytu = 'a' + 1 = 97 + 1 = 98 = 'b'

    cout << "Ky tu sau khi them 1 don vi: " << kytu;            
}
1 đối với
int main() {
    char kytu = 'a';
    cout << "Ky tu nhap vao la: " << kytu;

    kytu = kytu + 1;                        // kytu = 'a' + 1 = 97 + 1 = 98 = 'b'

    cout << "Ky tu sau khi them 1 don vi: " << kytu;            
}
2 hoặc
int main() {
    char kytu = 'a';
    cout << "Ky tu nhap vao la: " << kytu;

    kytu = kytu + 1;                        // kytu = 'a' + 1 = 97 + 1 = 98 = 'b'

    cout << "Ky tu sau khi them 1 don vi: " << kytu;            
}
3 đối với
int main() {
    char kytu = 'a';
    cout << kytu << " " << (int)kytu;  //in ra màn hình "a 97" 
}
5 , lấy luôn cả dấu cách khi nhập dữ liệu vào.

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
8

Hoặc có thể dừng mảng ở 1 ký tự bất kỳ bằng cách

char kytu1;            // Khai báo kytu1 không nhận giá trị
char kytu2 = 'a';      // kytu2 nhận giá trị là ký tự 'a'
9

Tạm kết

Kiểu dữ liệu ký tự có phần giống và cũng có phần khác so với kiểu dữ liệu số, ở bài viết này mình sẽ dừng ở việc khai báo nhập xuất cho mảng ký tự, phần sau mình sẽ nói rõ thêm về bộ nhớ đệm và khai báo kiểu ký tự, các hàm hay được sử dụng nhiều trong mảng ký tự.

Cảm ơn các bạn đã theo dõi, nếu được, nhớ đánh giá cho mình hoặc để lại comment ý kiến đóng góp của bạn về bài viết của mình.