Cách so sánh char vớiint c++
Cảm quan thì ‘có vẻ’ đúng lắm nhưng tiếc là không đúng với ý tưởng người tạo ra ngôn ngữ. Nguyên nhân sâu xa thì mình không biết nhưng mà chỉ nhớ phải theo các quy tắc của người ta. Với C/C++:
Show Ở đây
5 là viết tắt của
6, thuộc
7, có chức năng so sánh hai chuỗi theo thứ tự chữ cái trong từ điển. Giá trị trả về
8 cho biết 2 chuỗi bằng nhau, giá trị trả về
9 thì
0 ở trước
1, giá trị trả về
2 thì
0 ở sau
1. Còn với Java:
Với Java thì nó đơn giản dễ hiểu hơn nhiều, còn với C thì ta cần quay lại một chút. Xem ví dụ bên dưới:
Kết quả là:
Rõ rồi nhưng mà cái
5 là cái gì mà mỗi lần so sánh nó lại ra một số khác nhau thế? Để kiểm tra lại nó cụ thể là cái gì thì có thể sửa lại trong hàm
6:
Kết quả là:
Rõ rồi nhé, giá trị chính là số thứ tự chênh lệch của kí tự khác nhau đầu tiên trong bảng ASCII. 33 là kí tự chấm than trừ null, còn 32 là kí tự trắng trừ null. Còn dấu thì chỉ để xem cái nào nhỏ hơn hay lớn hơn mà thôi. Còn số 21 là kí tự ‘X’ - ‘C’, không in ra được nên sẽ có
7. Chú ý hàm strcmp() so sánh kiểu thứ tự từ điển, bảng alphabet của tiếng anh sẽ có khác một số ngôn ngữ khác, khi đó giải pháp thay thế là strcoll(), mình sẽ không giải thích ở đây. 2. So sánh hai số thựcĐa số các ngôn ngữ lập trình đều có 2 kiểu số thực là
8 và
9. Nhiều khi bất cẩn ta có thể sẽ có những phép so sánh như sau:
Thực tiễn hai số đó bằng nhau nhưng vào máy thì 🤣
Code chạy ngon lành nhưng đôi khi không biết lỗi ở đâu ra, cái này thực sự rất nguy hiểm. 3. Thực hiện phép tính trong mệnh đề điều kiệnCái này một số bạn vẫn sẽ mắc bẫy vì đôi khi muốn rút gọn phép tính vào ngay trong lúc so sánh. Ví dụ bài toán kiểm tra số nguyên
0 có gấp ba số
1 hay không?
Kết quả:
0 Cũng đoạn trên thay thành
2, ta có kết quả mới:
0 Vi diệu chưa? Sai tè le luôn. Bởi vì kết quả phép chia 2 số nguyên sẽ luôn là một số nguyên. Việc tính toán ở đây phải cẩn thận vì bên cạnh trường hợp làm tròn số thì còn lỗi tràn nữa:
2 Kết quả:
3 Vâng,
3 chỉ vì nó tràn kiểu dữ liệu
4 (tối đa 255 nên 2 * 200 = -112, và máy nó hiểu -112 <= 100 là đúng). Đặt phép tính vào lúc so sánh, là hành động bóp d*i thằng debugger, chiêu thức này ẩn chứa nguy hiểm tiềm tàng có thể dẫn đến vô sinh xin các bạn cẩn thận. 4. So sánh: x == 0 hay 0 == x?Lúc đi học thì gần như 100% người học đều được dạy rằng muốn so sánh A với một hằng B thì cứ nhất nhất là bên trái là A, bên phải là B. Nhưng mà với kiểu dữ liệu tham chiếu, liên quan đến con trỏ và đối tượng thì đây mới là vấn đề. Bạn sẽ gặp NULL như chưa từng gặp với kiểu so sánh thứ nhất. Ví dụ 1 đoạn code Java kiểm tra 1 thằng có học lớp “CNTT” (là một chuỗi hằng) hay không.
4 Thử chạy phát:
5 Do
5 chưa được khởi tạo nên dẽ dính
6 sẽ bị lỗi. Giải pháp nghĩ đến đầu tiên là kiểm tra khác null trước khi so sánh.
6 Và nó đã chạy:
7 May quá mới so sánh 1 thằng, lỡ so sánh vài thằng thì đúng là vêu mồm tập 2 😭, giải pháp cực kì đơn giản là đảo vị trí của 2 cái cho nhau, như thế này:
8 Cho ra kết quả tương tự:
7 Đơn giản phải không nào, né được biết bao nhiêu là phiền phức, tương tự như vậy cứ đảo hết giá trị hằng so sánh lên trước, biến hoặc đối tượng cần so sánh ra sau. Ok nhé 👍 |