So sánh chuỗi dùng được không
Bạn đang ở đâyadmin gửi vào Thứ bảy, 30 Tháng 8, 2014 - 18:04
Giới thiệuChúng ta có nhiều cách để so sánh chuỗi trong môi trường lập trình Arduino. Trong đó, ta có thể dùng các toán tử như \>=, <=, <, \>, \= hoặc sử dụng các hàm của thư viện String như equals(), equalsIgoreCase(). Việc so sánh chuỗi là việc so sánh mã của ký tự khác nhau đầu tiên của cả 2 chuỗi. Ví dụ, '1' < '2', 'a' < 'b', '999' > '1000' (vì ký tự đầu tiên khác nhau của 2 chuỗi đó nằm ở vị trí thứ 0 và ký tự '9' trong mã ASCII có giá trị lớn hơn ký tự '1'). Lưu ý: Chúng ta rất dễ bị nhầm lẫn rằng việc so sánh chuỗi số cũng chính là so sánh số. Điều này không chính xác (ví dụ trên), và vì vậy ta cần phải cẩn thận khi so sánh các chuỗi số. Và điều đơn giản nhất đó là việc ta chuyển số các chuỗi số ấy thành số ở các kiểu như int, float, long,... Bây giờ hãy gắn Arduino vào máy tính và upload đoạn code sau và rút kinh nghiệm của riêng mình! Lập trìnhString stringOne, stringTwo; void setup() { // Mở cổng Serial với mức baudrate 9600 Serial.begin(9600); while (!Serial) { }
stringOne = String("this");
stringTwo = String("that");
}
void loop() {
// so sánh 2 chuỗi có bằng nhau hay không (cách 1)
if (stringOne == "this") { }
// nếu 2 chuỗi khác nhau
if (stringOne != stringTwo) { }
// trường hợp 2 từ cùng 1 nghĩa nhưng cách viết khác nhau (hoa, thường)
stringOne = "This";
stringTwo = "this";
//Vì viết khác định dạng nên khi so sánh, 2 chuỗi này sẽ không bằng nhau
if (stringOne != stringTwo) { }
// Bạn có thể dùng hàm equals để kiểm tra 2 chuỗi có giống (bằng) nhau hay không
if (stringOne.equals(stringTwo)) { }
else { }
// hoặc trong trường hợp bạn muốn kiểm tra 2 chuỗi có bằng nhau hay không mà không phân biệt hoa thường
if (stringOne.equalsIgnoreCase(stringTwo)) { } else { }
// một chuỗi số nguyên có thể so sánh với 1 số nguyên bằng cách...
stringOne = "1";
int numberOne = 1;
if (stringOne.toInt() == numberOne) { }
// so sánh 2 chuỗi số nguyên
stringOne = "2";
stringTwo = "1";
if (stringOne >= stringTwo) { }
// các toán tử so sánh cũng có thể dùng để so sánh 2 chuỗi
stringOne = String("Brown");
if (stringOne < "Charles") { }
if (stringOne > "Adams") { }
if (stringOne <= "Browne") { }
if (stringOne >= "Brow") { }
// hàm compareTo() dùng để so sánh 2 chuỗi
// nó sẽ trả về 1 số nguyên là vị trí đầu tiên (tính từ bên trái)
// khác nhau giữa 2 chuỗi.
// số nguyên nó là số âm nếu chuỗi A bé hơn chuỗi B
// là số dương nếu chuỗi A lớn hơn chuỗi B
// và bằng 0 khi 2 chuỗi bằng nhau.
stringOne = "Cucumber";
stringTwo = "Cucuracha";
if (stringOne.compareTo(stringTwo) < 0 ) { }
else { }
while (true) {} //dừng chương trình không chạy tiếp nữa
}Hãy trở thành thành viên của Cộng đồng Arudino Việt Nam để mở khóa chức năng này. Bài viết này mình sẽ hướng dẫn các bạn sử dụng 3 hàm so sánh xâu thông dụng và cách tự xây dựng các hàm này cho riêng mình NỘI DUNG :
strcmp 1. Hàm strcmp() Hàm strcmp() Để so sánh 2 xâu trong C thì bạn không thể sử dụng các toán tử so sánh mà phải dùng hàm, quy tắc so sánh 2 xâu là xét theo thứ tự từ điển. Thứ tự từ điển được quyết định bởi mã ASCII, mã ASCII nhỏ hơn sẽ có thứ tự từ điển nhỏ hơn, ví dụ kí tự 'A' thì có thứ tự từ điển nhỏ hơn kí tự 'B' Khi so sánh 2 xâu theo thứ tự từ điển thì ta lần lượt so sánh 2 kí tự ở cùng vị trí của 2 xâu Cú pháp : int strcmp(char *s, char *t) Tham số : s và t là 2 con trỏ hoặc 2 mảng char[] Giá trị trả về :
Trong 1 số trình biên dịch thì khi s < t sẽ trả về -1 và khi s > t sẽ trả về 1. Ví dụ giá trị trả về khi so sánh 2 xâu bằng hàm strcmp xâu sxâu tstrcmp(s, t)28tech28tech abc-128tech 28aech zzzz128tech28tech028tech28techabcd-1 Ví dụ : include "stdio.h"include "string.h"include "ctype.h"int main(){ }Output : 1 Hai xau ky tu giong nhau ! Xây dựng hàm strcmp() : Để xây dựng hàm này ta cần xét 2 kí tự ở cùng vị trí của 2 xâu, nếu gặp kí tự đầu tiên khác nhau thì dựa vào thứ tự từ điển của kí tự này để suy ra thứ tự từ điển của 2 xâu ban đầu Nếu không có kí tự nào khác nhau ta so sánh tới chiều dài, nếu chiều dài cũng giống nhau thì 2 xâu bằng nhau theo thứ tự từ điển |