So sánh chuỗi string trong c năm 2024

Bạn đang ở đây

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

  • 26134 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 }

So sánh chuỗi string trong c năm 2024

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.

string cung cấp một phương pháp so sánh khác phức tạp hơn nhưng cũng hiệu quả hơn. Chúng ta có thể sử dụng nó nếu chúng ta có một số kiến ​​thức cơ bản về cách các mà các đối tượng thao tác trên dữ liệu của chúng. Đây sẽ là một bài giới thiệu tốt để thực hành phong cách lập trình hướng đối tượng.

Trong cách tiếp cận cổ điển, chúng ta thường có một số dữ liệu và một bộ các hàm hoạt động trên dữ liệu. Chúng ta đã quen với cách xử lý dữ liệu như sau :

function(data);

Trong cách tiếp cận hướng đối tượng, chúng ta sử dụng thuật ngữ khác nhau. Cả dữ liệu và các hàm đều được nhúng vào trong cái gọi là đối tượng. Dữ liệu là thuộc tính của đối tượng (hoặc gọi biến thành viên), và các hàm là các phương thức của đối tượng (hoặc gọi các hàm thành viên). Chúng ta sẽ sớm trở lại các thuật ngữ này và giải thích chi tiết hơn về ý nghĩa của chúng.

Nếu chúng ta muốn một phương thức cụ thể (hàm thành viên) để xử lý dữ liệu nhúng trong một đối tượng, chúng ta gọi hàm thành viên của đối tượng như sau:

object.member_function ();

Hãy bắt đầu bằng một ví dụ rất đơn giản. Chúng ta sẽ viết lại chương trình kiểm tra mật khẩu để cho bạn thấy một trong số rất nhiều hàm thành viên tồn tại trong mỗi đối tượng string. Hàm thành viên được gọi là ở đây có tên là compare và tên của nó đã nói lên mục đích của nó rồi: nó được thiết kế để so sánh một chuỗi với một chuỗi khác. Hàm này trả về 0 (zero) nếu các chuỗi giống hệt nhau.

Hãy xem chương trình bên phải →

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

include

include

using namespace std;

int main(void)

{

string secret \= "abracadabra";

string password;

cout << "Enter password:" << endl;

getline(cin,password);

if(secret.compare(password) \== 0) {

cout << "Access granted" << endl;

}

else {

cout << "Sorry";

}

return 0;

}

Chúng ta đã thay thế sự xuất hiện của toán tử == với tính năng so sánh bằng một hàm tương đương. Bây giờ hãy quan sát thật kỹ. Lưu ý biểu thức:

secret.compare(password)

Nó gọi hàm thành viên có tên là compare của đối tượng secret để so sánh chuỗi được lưu trữ trong secret chuỗi được lưu trữ trong password. Chúng cũng ta có thể viết biểu thức này theo cách sau:

password.compare(secret)

mà không thay đổi hành vi của chương trình


Tất nhiên, các khả năng của hàm thành viên compare không dừng lại ở việc kiểm tra sự đồng nhất của các chuỗi. Nó cũng có thể tìm ta tất cả các mối quan hệ giữa hai chuỗi. Đây là cách mà nó hoạt động:

  • str1.compare(str2) == 0 nếu str1 == str2
  • str1.compare(str2) > 0 nếu str1 > str2
  • str1.compare(str2) < 0 nếu str1 < str2

Một lần nữa, chúng ta hãy viết lại một trong những chương trình ở trang trước trước của chúng ta theo phương pháp mới này →