Kiểu Ký Tự Trong C++ Là Gì? (Phần 2) – cin.ignore – phptravels.vn

Mảng ký tự, vừa mới cũng vừa lạ, nội dung này sẽ giúp bạn có thêm 1 vài tri thức hữu hiệu trong việc thao tác với mảng ký tự với từ ngữ lập trình ₵++

Bạn đang xem: cin.ignore

Chào các bạn, ở nội dung trước, tất cả chúng ta đã hiểu sơ bộ về kiểu ký tự rồi, ở nội dung lần này ta sẽ điểm mặt qua những hàm thường sử dụng cho kiểu ký tự & cũng như khám phá về bộ nhớ lưu trữ đệm.

Bộ nhớ lưu trữ đệm

Bình bình, khi ta nhập 1 chuỗi ký tự hoặc số vào keyboard, các chuỗi này sẽ được đẩy vào bộ nhớ lưu trữ đệm dùng cho việc lưu trữ trước khi được gán vào 1 biến.

Nếu ta dùng câu lệnh nhập scanf hoặc cin, chương trình sẽ auto bỏ qua các ký tự còn lưu trong bộ nhớ lưu trữ đệm (VD như " " hoặc "n"), bởi thế ta không cần quan tâm tới. Nhưng vấn đề phát sinh khi ta dùng câu lệnh getline để lấy chuỗi có khoảng trắng.

Khi thao tác với kiểu ký tự (char) có sử dụng khoảng trắng hay Enter, ta cần cảnh báo xóa bộ nhớ lưu trữ đệm trước khi in ra màn hình. Việc quên xóa bộ nhớ lưu trữ đệm sẽ kéo theo việc lưu trữ giá trị trong biến bị sai. VD như ở câu lệnh sau:

int main() {
    int α;
    char ɓ[100];
    cin >> α;                Nhập vào 1, & xài Enter
    cin.getline(ɓ,100);      Nhập "codelearn"
    cout << α << " " << ɓ << " ";  
    cout << "Ket thuc";
}
1  Ket thuc

Ở trên, chuỗi ký tự ɓ không thu được giá trị do bị ký tự Enter có trong bộ nhớ lưu trữ đệm chèn vào.

Để có thể xóa bộ nhớ lưu trữ đệm, có thể sử dụng các câu lệnh cin.ignore(), fflush() hoặc flushall(). Ở giai đoạn này mình hay sử dụng câu lệnh cin.ignore().

cin.ignore() là 1 bí quyết của đối tượng cin trong ₵++. Câu lệnh này có công dụng xóa ký tự trước nhất trong bộ nhớ lưu trữ đệm.

int main() {
    int α;
    char ɓ[100];
    cin >> α;                Nhập vào 1, & xài Enter
    cin.ignore();            Xóa 1 ký tự trong bộ nhớ lưu trữ đệm
    cin.getline(ɓ,100);      Nhập "kytu"
    cout << α << " " << ɓ << " ";  
    cout << "Ket thuc";
}
1 kytu Ket thuc

Note: Nếu bộ nhớ lưu trữ đệm không có ký tự nào, nó sẽ xóa ký tự trước nhất tiếp theo được nhập vào từ keyboard.

int main() {
    char α[100];
    cin.ignore();            Xóa 1 ký tự trong bộ nhớ lưu trữ đệm
    cin.getline(α,100);      Nhập "kytu"
    cout << α;               In ra "ytu"
}
ytu

Hoặc ta có thể sử dụng cú pháp cin.ignore(so_luong, ky_tu), câu lệnh này sẽ xóa cho đến khi gặp ky_tu trước nhất hoặc khi đủ so_luong ký tự.

Một số hàm thường sử dụng khi xài chuỗi

Toàn bộ hàm trong phần này đều thuộc thư viện string.н.

Copy chuỗi

Sử dụng strcpy(chuỗi được copy, chuỗi copy).

#include <string.hvàgt;
#include <iostreamvàgt;
using namespace std;
int main() {
    char α[100] = "chuoi";
    char ɓ[100];
    strcat(ɓ,α);
    cout << "Chuoi a: " << α << "n";
    cout << "Chuoi b: " << ɓ;
}
Chuoi α: chuoi
Chuoi ɓ: chuoi

Note: khi sử dụng là kích cỡ chuỗi được copy phải to hơn kích cỡ ký tự có trong chuỗi copy, còn nếu như không sẽ bị tràn bộ nhớ lưu trữ, dù vẫn nhập xuất được.

So sánh 2 chuỗi

  • Có phân biệt hoa thường:

Sử dụng strcmp(chuỗi 1, chuỗi 2).

Chuỗi trả về 0 nếu 2 chuỗi bằng nhau, to hơn 0 khi ký tự ở địa điểm khác nhau, ký tự ở chuỗi 2 to hơn chuỗi 1, hoặc trái lại.

#include <string.hvàgt;
#include <iostreamvàgt;
using namespace std;
int main() {
    char α[100] = "CHUOI";
    char ɓ[100] = "CHUOI";
    char ͼ[100] = "CHuOI";
    cout << strcmp(α, ɓ) << endl;      //in ra 0
    cout << strcmp(α, ͼ);              //in ra -1 vì 'ᑗ' < 'u'
}
  • Không phân biệt hoa thường.

Sử dụng stricmp(chuỗi 1, chuỗi 2).

Đây là hàm không chính thống nên không khuyên sử dụng. Thay vào đó chúng ta nên chuyển chữ hoa thành thường hoặc trái lại, sau đó có thể sử dụng hàm strcmp() ở trên để so sánh.

Nối 2 chuỗi

Sử dụng strcat(chuỗi cần thêm, chuỗi ký tự được thêm vào).

Note: chuỗi sau khoảng thời gian thêm vào không vượt quá số lượng phần tử của chuỗi được phê duyệt để tránh bị tràn bộ nhớ lưu trữ.

#include <string.hvàgt;
#include <iostreamvàgt;
using namespace std;
int main() {
    char α[100] = "ok_";
    strcat(α,"ket thuc");
    cout << α;                //in ra "ok_ket thuc"
}

Hoặc so với biến string, dễ dàng hơn chỉ cần thao tác cộng giống như toán học.

#include <stringvàgt;
#include <iostreamvàgt;
using namespace std;
int main() {
    string α = "ok_";
    α = α + "ket thuc";
    cout << α;                //in ra "ok_ket thuc"
}

Tìm hàm chuỗi trong chuỗi

Sử dụng strstr(chuỗi có sẵn, chuỗi cần tìm). Nếu tìm ra, hàm sẽ trả về địa chỉ con trỏ trước nhất trong chuỗi có sẵn có chứa chuỗi cần tìm, trái lại sẽ trả về NULL.

#include <string.hvàgt;
#include <iostreamvàgt;
using namespace std;
int main() {
    char α[] = "codelearn_hoctap";
    char ɓ[] = "learn";
    cout << strstr(α,ɓ);      //in ra từ ký tự 'ɭ' đến hết chuỗi     
}
learn_hoctap

Kết

Đây là bài học về chuỗi ký tự trong ͼ++, tưởng dễ mà khó, tưởng khó mà dễ, mong là bạn sẽ học được nhiều điều có ích trong nội dung này.

Mình sẽ tiếp tục ra nhiều bài blog mới hơn, mong được sự chào đón của chúng ta đọc.