Xâu kí tư bản so sánh kí tự

Bạn đang ở đây

admin gửi vào Thứ bảy, 30 Tháng 8, 2014 - 18:04

  • 25495 lượt xem

Giới thiệu

Chú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ình

String stringOne, stringTwo; void setup() { // Mở cổng Serial với mức baudrate 9600 Serial.begin(9600); while (!Serial) {

; // đợi khi nào cổng Serial được bật (chỉ cần thiết đối với mạch Leonardo)
} 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") {
Serial.println("StringOne == \"this\"");
} // nếu 2 chuỗi khác nhau if (stringOne != stringTwo) {
Serial.println(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) {
Serial.println(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)) {
Serial.println(stringOne + " equals " + stringTwo); //equals nghĩa là bằng
} else {
Serial.println(stringOne + " does not equal " + stringTwo); // does not equal nghĩa là không bằng
} // 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)) {
Serial.println(stringOne + " equals (ignoring case) " + stringTwo); //bằng (không phân biệt hoa thường)
} else {
Serial.println(stringOne + " does not equal (ignoring case) " + stringTwo); // không bằng (không phân biệt hoa thường)
} // 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) {
Serial.println(stringOne + " = " + numberOne);
} // so sánh 2 chuỗi số nguyên stringOne = "2"; stringTwo = "1"; if (stringOne >= stringTwo) {
Serial.println(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") {
Serial.println(stringOne + " < Charles");
} if (stringOne > "Adams") {
Serial.println(stringOne + " > Adams");
} if (stringOne <= "Browne") {
Serial.println(stringOne + " <= Browne");
} if (stringOne >= "Brow") {
Serial.println(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 ) {
Serial.println(stringOne + " be hon " + stringTwo);
} else {
Serial.println(stringOne + " lon hon " + stringTwo);    
} while (true) {} //dừng chương trình không chạy tiếp nữa }

Xâu kí tư bản so sánh kí tự

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.

-xâu ký tự được định nghĩa bằng từ khóa STRING. Xâu ký tự là dữ liệu bao gồm một dãy các ký tự trong bảng mã ASSCII.

Cách khai báo:

Var ten_xau: STRING[độ dài của xâu];

hoặc Var ten_xau:string;

ví dụ:

var hoten:string[20];

var hoten:string;

Xâu ký tự trong bộ nhớ nó chiếm số byte bằng số ký tự cực đại được khai báo cộng với byte đầu tiên chứa số ký tự hiện có của xâu. Độ dài tối đa của xâu ký tự là 255.

- Cách nhập/xuất: Cách nhập hay xuất kiểu STRING cũng tương tự như các kiểu dữ liệu khác, ta sử dụng các thủ tục READ, READLN, hoặc WRITE, WRITELN

Ví dụ:

Readln(hoten);

Writeln(hoten);

-Giá trị gán cho biến kiểu xâu phải được để trong cặp nháy đơn

Ví dụ

a:=’THCS NQ’;

-Gán giá trị các biến kiểu xâu cho nhau tương tự biến kiểu khác

Ví dụ:

a1:=’Ngo’; a2:=’Quyen’; a1:=a2; ==> a1 sẽ là Quyen

- Truy cập từng phần tử của xâu ký tự: truy cập tương tự mảng 1 chiều: thông qua tên biến kiểu STRING và chỉ số của nó

Ví dụ:

a:= 'Truong THCS Ngo Quyen';

write(a[6]);

-> Kết quả: cho ra chữ g.

write(a[8]);

-> Kết quả: cho ra chữ T.

Các thao tác trên xâu ký tự:

1/ Phép cộng xâu:

Ví dụ:

a1:=’Ngo’; a2:=’Quyen’; a=a1 + a2;

-> kết quả a=NgoQuyen

2/ Phép so sánh:

Hai xâu ký tự có thể so sánh với nhau bằng các phép so sánh =, >, <…

Nguyên tắc so sánh thực hiện như sau, chúng sẽ đem từng ký tự tương ứng với nhau để so sánh, xâu nào có ký tự có số thứ tự trong bảng mã ASCII lớn hơn thì xâu đó lớn hơn (kí tự a sẽ nhỏ hơn kí tự b , a sẽ lớn hơn A)

Hai xâu ký tự được gọi là bằng nhau khi chúng hoàn toàn giống nhau (có độ dài như nhau).

Ví dụ: ‘abc’ = ‘abc’;

3/ Các thủ tục và hàm chuẩn xử lý xâu ký tự

  1. Hàm length(s): cho độ dài thực của xâu ký tự s. Tính tất cả các kí tự, kể cả các kí tự ở đầu, giữa xâu s

ví dụ: s:=’Ngo Quyen’ thì LENGTH(s) cho bằng 9.

b/ Thủ tục DELETE(s,i, n): xóa n ký tự trong xâu s kể từ vị trí i

Ví dụ: s= ‘nam hoc moi’

Delete(s,5,4) lúc đó st cho ra là ‘nam moi’

c/ Thủ tục INSERT(s1, s, i): Thủ tục cho kết quả bằng cách chèn xâu s1 vào xâu s tại vị trí i, những ký tự đứng sau i sẽ được dời về phía sau của xâu ký tự s1.

Ví dụ: s1:=’abc’;

s:=’xyzmn’;

INSERT(s1,s,2) lúc đó s=’xabcyzmn’;

d/ Thủ tục STR(value, s): Thủ tục này thực hiện việc chuyển đối giá trị kiểu số (value) sang dạng xâu ký tự và gán cho biến t.

Ví dụ: x là một số nguyên có giá trị: x:=68;

STR(x,s) sẽ cho kết quả xâu st là: s=’68’;

e/ Thủ tục VAL(st, value,code) đối một xâu ký tự st sang dạng số và gán cho biến value, nếu biến đối thành công thì code sẽ nhận giá trị bằng 0. ngược lại thì cho giá trị khác không