Thứ Tư, 30 Tháng Mười Một 2022
Trang chủLập trìnhLập trình C/C++Chuỗi ký tự trong ngôn ngữ lập trình C

Chuỗi ký tự trong ngôn ngữ lập trình C

DÁNH SÁCH BÀI VIẾT
Lập trình là gì? Một số khái niệm trong lập trình
Cài đặt IDE Dev C++ – Môi trường lập trình C/C++
Làm quen với ngôn ngữ C – Chương trình Hello World
Những cú pháp cơ bản
Các kiểu dữ liệu
Biến và Toán tử
Vòng lặp for, while và do…while
Câu lệnh điều kiện if else
Cấu Trúc Rẽ Nhánh Switch … Case
Từ khóa break và continue
Mảng
Hàm
Tham biến và Tham trị
Chuỗi ký tự
Một số hàm xử lý chuỗi
Con trỏ
Đọc ghi file
Struct – Dữ liệu kiểu cấc trúc

Trong bài viết này chúng ta sẽ làm rõ sự khác nhau giữa mảng và chuỗi, cách khởi tạo và khai báo chuỗi. Cách để nhập chuỗi có khoảng trắng và một số lưu ý khi làm việc với chuỗi.

Khái niệm

Chuỗi ký tự là một dãy gồm các ký tự hoặc một mảng các ký tự được kết thúc bằng ký tự ‘\0’ (còn được gọi là ký tự NULL trong bảng mã ASCII).

Các hằng chuỗi ký tự được đặt trong cặp dấu nháy kép “”.

Khai báo

Chuỗi là một mảng các ký tự có kiểu char, để khai báo chuỗi ta ta dùng cú pháp sau:

char tên_biên[độ_dài]

Ví dụ để khai báo chuỗi name với độ dài tối đa là 20 ký tự ta khai báo:

char name[20];

vừa khai báo vừa gán chuỗi giá trị:

char name[20] = "Nguyen Van A";

Nhập xuất chuỗi

Nhập chuỗi

Vì bản chất chuỗi cũng là một mảng nhưng có kiểu là char nên khi nhập chuỗi cũng có thể nhập từng phần tử cho chuỗi nhưng sẽ không ai sử dụng cách đó cả, mà sẽ nhập làm như sau:

char name[20];
printf("Moi ban nhap ten");
scanf("%s",&name):

%s là định dạng kiểu dữ liệu chuỗi.

Hoặc chúng ta cũng có thể sử dụng hàm gets() để nhập chuỗi như sau.

gets(name);

Tuy nhiên ở đây mình khuyến khích là nên sử dụng hàm gets(). Bởi vì hàm scanf để nhập chuỗi thì bạn sẽ thấy rằng không thể nhập được chuỗi có dấu cách hoặc nếu trước đó bạn nhập số thì sau đó không nhập được chuỗi nữa.

Lý do là scanf chỉ đọc dữ liệu không bao gồm khoảng trắng (dấu cách, dấu tab, enter, …) và các khoảng cách này sẽ được lưu vào bộ đệm bàn phím do đó bạn chỉ nhận được chuỗi đầu tiên trước dấu cách mà thôi.

Xuất chuỗi

Để xuất chuỗi ta cũng làm tương tự như nhập chuỗi nhưng thay vì sử dụng lệnh nhập là scanf ta dùng lệnh in là printf và cũng chọn kiểu định dạng là %s.

printf("%s", name);

Nhập chuỗi thay vì có lệnh gets() thì ở đây chúng ta có lệnh puts().

puts(name)

Ví dụ minh họa

Sử dụng lệnh scanf và printf

#include <stdio.h>
int main()
{
    char ten[30];
    printf("Nhap ten: ");
    scanf("%s", &ten);
    printf("Ten cua ban la: %s", ten);
}

Output

Kết quả thuwch hiện đoạn chương trình

Vì lệnh scanf() không thể bắt được dấu cách như mình đã giải thích ở trên nên khi bạn nhập vào Nguyen Van A, nhưng chỉ có thể nhận được từ đầu tiên là Nguyen.

Sử dụng hàm gets() và puts()

#include <stdio.h>
int main()
{
    char ten[30];
    printf("Nhap ten: ");
    gets(ten);
    printf("Ten cua ban la: ");
    puts(ten);
}

Output

Chuỗi ký tự trong ngôn ngữ lập trình C

Lúc này nhận được đầy đủ chuỗi Nguyen Van A.

Hiện tượng trôi lệnh

 Nếu bây giờ bạn thực hiện cho nhập số trước và chuỗi ngay sau đó thì hiện tượng này cũng xảy ra vì scanf chỉ đọc số theo đúng định dạng mà không đọc được phím enter khi bạn nhấn lúc nhập xong số (enter là ký tự hoặc cũng có thể coi là chuỗi), nó được lưu vào bộ đệm và khi đọc giá trị nhập cho chuỗi nó tìm trong bộ đệm thấy ký tự enter là kiểu chuỗi nên nó gán luôn cho chuỗi đó.

Để nhập được chuỗi có khoảng trắng (dấu cách) chúng ta sử dụng hàm gets.

Để không bị trôi lệnh khi nhập số trước và chuỗi sau ta cần xóa bộ đệm bàn phím bằng lệnh fflush(stdin); ngay sau khi nhập số.

Ví dụ: không sử dụng lệnh  fflush(stdin); 

#include <stdio.h>
int main()
{
    int tuoi = 0;
    // khai bao chuoi co toi da 30 ky tu
    char ten[30], queQuan[30];
 
    printf("Nhap ho ten:  ");
    gets(ten); // nhap chuoi khong can dau &
 
    printf("BNhap tuoi: ");
    scanf("%d", &tuoi);
    
    printf("Nhap que quan:  ");
    gets(queQuan);
 
    printf("\n====\n");
    printf("Ten: %s \nTuoi:%d \nQue quan:%s \n", ten, tuoi, queQuan);
 
    return 0;
}

Output

Chuỗi ký tự trong ngôn ngữ lập trình C

Khi không sử dụng lệnh  fflush(stdin);  có thể thấy hiện tượng trôi lệnh đã sảy ra và bạn không thể nhập được Quê quán.

Ví dụ: Sử dụng lệnh  fflush(stdin); 

#include <stdio.h>
int main()
{
    int tuoi = 0;
    // khai bao chuoi co toi da 30 ky tu
    char ten[30], queQuan[30];
 
    printf("Nhap ho ten:  ");
    gets(ten); // nhap chuoi khong can dau &
 
    printf("BNhap tuoi: ");
    scanf("%d", &tuoi);
    

 	fflush(stdin);
    printf("Nhap que quan:  ");
    gets(queQuan);
 
    printf("\n====\n");
    printf("Ten: %s \nTuoi:%d \nQue quan:%s \n", ten, tuoi, queQuan);
 
    return 0;
}

Outout

Kết quả thực hiện chương trình

Lúc này hiện tượng trôi lệnh không còn sảy ra nữa.

5 1 Bỏ phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?


0
Giáo sư! có thể ném gạch bên dưới nhé!x
()
x