STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    Thao Tác Với Chuỗi Trong C/C++

    Kiến thức cơ bản trong thao tác xử lý chuỗi trong C++.
    Rye Nguyen

    Rye Nguyen

    28/07/2015
    06/09/2020
    3 phút đọc
    Thao Tác Với Chuỗi Trong C/C++

    Chuỗi là gì

    Khái niệm chuỗi ký tự do con người đặt ra để thuận tiện trong việc sử dụng. Có thể hiểu đơn giản, chuỗi là tập hợp các ký tự được lưu trữ liên tiếp trong vùng nhớ máy tính. Mỗi ký tự có kích thước 1 byte, do đó kích thước của chuỗi ký tự sẽ bằng tổng số các ký tự có mặt trong chuỗi.

    Thực chất, chuỗi ký tự là một mảng dữ liệu (array), mỗi phần tử trong mảng có kích thước 1 byte. Do đó, chuỗi ký tự có đầy đủ các tính chất của một mảng dữ liệu. Ngoài ra, nó còn có nhiều đặc tính và phương thức riêng để thao tác được dễ dàng hơn.

    Cách sử dụng

    Để khai báo chuỗi, không cần include thêm bất cứ thư viện nào. Tuy nhiên, để thao tác với chuỗi, không thể xử lý từng phần tử trong mảng ký tự đã khai báo, vì sẽ rất mất thời gian và nhiều khả năng gây ra sai sót. Do đó, C/C++ cung cấp các function cần thiết để thao tác với chuỗi. Hầu hết các hàm này nằm trong thư viện <string.h>. Ngoài ra, nếu có thao tác nhập, xuất chuỗi, cần include thêm thư viện <stdio.h>.

    Các bạn xem xét đoạn code sau để hiểu được cách thao tác với chuỗi:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char a[10];
        gets(a);
        printf("%d", strlen(a));
    
        char *b = new char[10];
        strcpy(b, a);
        puts(b);
        delete[] b;
    
        return 0;
    }

    Một số hàm thao tác với chuỗi thường dùng được liệt kê trong bảng sau:

    Tên hàm Chức năng
    strlen Lấy độ dài chuỗi
    strcpy Copy chuỗi sang vùng nhớ mới
    strcmp So sánh hai chuỗi
    strcat Nối chuỗi nguồn vào chuỗi đích
    strstr Tìm chuỗi con trong chuỗi nguồn

    Ngoài ra còn nhiều hàm khác không được liệt kê trong bảng này. Tuỳ theo nhu cầu sử dụng, có thể tìm hiểu và vận dụng vào việc học tập của mình.

    Những vấn đề thường gặp

    Nhập chuỗi có khoảng trắng

    Hàm scanf trong C nhận diện khoảng trắng giống như ký tự xuống dòng \n, như một dấu hiệu để kết thúc chuỗi thu được từ bộ đệm stdin (khác với ký tự kết thúc chuỗi \0). Do đó, khi nhập dữ liệu có khoảng trắng, chẳng hạn như nhập họ tên, phần dữ liệu còn lại sau khoảng trắng sẽ bị giữ lại ở stdin và hàm scanf sẽ không nhận đủ lượng dữ liệu cần thiết.

    Để nhập chuỗi có khoảng trắng, sử dụng hàm gets. Cú pháp của hàm như sau:

    char* gets(char* str);

    Hàm gets sẽ nhận khoảng trắng như một ký tự bình thường. Quá trình nhập sẽ kết thúc khi nhấn phím Enter.

    Trôi dòng lệnh

    Khi trên stdin còn dữ liệu phù hợp với yêu cầu (thông thường là ký tự \n của lần nhập dữ liệu trước), nó sẽ bỏ qua các hàm nhập dữ liệu và truyền dữ liệu còn lại đó cho các hàm.

    Để không bị trôi các hàm nhập, cần xoá sạch bộ đệm stdin trước mỗi hàm nhập bằng dòng code fflush(stdin).

    Quên huỷ vùng nhớ

    "Có new là phải có delete". Việc không huỷ vùng nhớ sẽ không để lại "dấu vết" gì thấy được để khắc phục, nhưng nó sẽ gây ra lỗi memory leak (rò rỉ vùng nhớ). Vùng nhớ này sẽ không bị huỷ (vì không có một biến nào được phép quản lý vùng nhớ này nữa) cho đến khi mọi thứ có liên quan đến vùng nhớ này được giải phóng (ở đây là IDE). Khi làm việc với những project lớn, việc reset máy thường xuyên là điều khó chấp nhận được, vì nó sẽ làm chậm tiến độ công việc. Do đó hãy cẩn thận huỷ tất cả vùng nhớ được tạo ra bằng cấp phát động trước khi kết thúc chương trình.

    0 Bình luận
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Đề xuất

      Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
      STDIO

      Trang chính

      Công ty TNHH STDIO

      30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn

      383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

      Đã thông báo Bộ Công Thương
      ©STDIO, 2013 - 2020