So sánh chuỗi trong C – strcmp
Nội dung
- 1. Hàm strcmp trong string.h
- 2. Nguyên tắc so sánh
Ví dụ hàm strcmp[] trong C
Kết quả:
Bài tập C: So sánh hai chuỗi trong C
Đề bài: Viết chương trình C để sa sánh hai chuỗi.
Yêu cầu bài tập C này là so sánh xem hai chuỗi có đồng nhất [giống nhau] hay không. Để giải bài tập C này bạn cần sử dụng vòng lặp để duyệt qua tất cả các ký tự của hai chuỗi và kiểm tra từng ký tự tương ứng với chỉ mục có giống nhau không.
So sánh chuỗi nhập vào với chuỗi có sẵn
khi nhập vào dnh thì mangkitu[] sẽ có 4 phần tử [cộng thêm kí tự kết thúc chuỗi ‘\0’]. vậy mình phải so sánh như thế để điều kiện if đúng và in ra YES
Thứ nhất tự giác gg, hay đơn giản trong bất kì quyển giáo trình nào cũng nhắc đến hàm strcmp
Thứ hai có thể tự viết hàm này bằng cách so sánh lấn lượt từng kí tự của 2 xâu
So sánh 2 chuỗi thì dùng hàm strcmp còn so sánh các kí tự trong 2 chuỗi thì dùng hàm strncmp nhé.
//www.cplusplus.com/reference/cstring/strcmp/
//www.cplusplus.com/reference/cstring/strncmp/
Thứ nhất tự giác gg, hay đơn giản trong bất kì quyển giáo trình nào cũng nhắc đến hàm strcmpThứ hai có thể tự viết hàm này bằng cách so sánh lấn lượt từng kí tự của 2 xâu
char mangkitu[]=""; printf["nhap chuoi: "]; gets[mangkitu]; if[strcmp[mangkitu,"dnh"]==0] printf["YES"]; else printf["NO"];So sánh 2 chuỗi thì dùng hàm strcmp còn so sánh các kí tự trong 2 chuỗi thì dùng hàm strncmp nhé.
nếu dùng hàm xử lý chuỗi thì dễ rồi, ý mình hỏi là có cách nào để so sánh trực tiếp 2 chuỗi với nhau bằng phép toán == được k?
chuỗi nhập vào sẽ có thêm kí tự ‘\0’ nhưng mình thêm kí tự ‘\0’ vào chuỗi có sẵn mà sao nó vẫn trả về kết quả sai
Phép so sánh == không dùng để so sánh nội dung của 2 chuỗi được.
Câu hỏi và giải đáp của bạn đều có ở đây nhé.
//diendan.congdongcviet.com/threads/t50872::2-chuoi-giong-nhau-nhung-lai-ko-bang-nhau-khi-so-sanh.cpp
oh! mình hiểu rồi, cám ơn bạn nhiều!
char mangkitu[]="";
Góp ý với bạn là đoạn trên không hợp lệ về mặt logic. Theo mình hiểu bạn định khai báo cách đó để áp ụng cho nhập xâu tùy ý. Nhưng về mặt logic là sai vì sau câu lệnh đó mangkitu chỉ có kích thước là 1 [chứa ký tự \0]. Bạn phải khai báo kích thước của mangkitu hoặc dùng cấp phát động.
mình xem video của anh @ltd thì chỉ thấy cách khai báo kích thước mangkitu hoặc dùng cấp phát động theo như bạn nói, mà sao khi khai báo char mangkitu[]= ""; thì chương trình vẫn chạy đúng, mình cũng thắc mắc lâu lắm rồi mà chưa giải đáp được, sẵn tiện bạn biết thì bỏ chút thời gian giải thích giúp mình được k? mình cảm ơn nhiều
- Bộ nhớ của máy tính được tổ chức theo các ô nhớ liên tiếp nhau. Khi bạn khai báo một mảng có kích thước n thì nó sẽ cấp phát cho bạn n * [kích thước của từng kiểu dữ liệu, ví dụ: char - kích thước 1 byte, short int - kích thước 2 byte]. Nhưng bạn có vẫn dùng được array[n+1] nếu như vùng nhớ đó free, không bị chương trình nào dùng. C không quan tầm và không check kích thước của mảng. Mà lập trình viên phải làm điều đó.
- Trong trường hợp của bạn mảng mangkitu chỉ có 1 byte nhưng tại sao bạn vẫn dùng được là vì có thể vùng nhớ lân cận mangkyti vẫn đang free, không có chương trình nào dùng cả, nhưng nếu có chương nào đang dùng thì chương trình của bạn sẽ bị lỗi ngay [chỉ xảy ra khi chạy chương trình] và đây gọi là lỗi run-time.