So sánh kieu string trong c năm 2024

Khi so sánh 2 số trong C thì ta có một số phép toán làm rất đơn giản <, >, >=, <=, ==, !=, tuy nhiên để so sánh chuỗi thì chúng ta không thể dùng các phép toán đó mà cần phải dùng hàm strcmp nằm trong thư viện string.h.

Hàm strcmp so sánh chuỗi s1 và chuỗi s2 và cho ta kết quả:

  • 1 Nếu s1 lớn hơn s2
  • 0 Nếu s1 giống s2
  • -1 Nếu s1 nhỏ hơn s2

Lưu ý: Trong Linux, hàm này trả về giá trị âm, dương, 0 (là khoảng cách giữa 2 ký tự khác nhau tương ứng trong s1, s2).

Ví dụ chương trình sau:

include

include

int main() {

char s1[20];
char s2[20];                
do 
{
    printf("Enter s1: ");
    gets(s1);
    printf("Enter s2: ");
    gets(s2);
    int x = strcmp(s1, s2);
    printf("x = %d", x);
    if(x < 0) printf(" => %s < %s", s1, s2);
    if(x > 0) printf(" => %s > %s", s1, s2);
    if(x == 0)printf(" => %s = %s", s1, s2);
    printf("\n\n");
} while ( strcmp(s1, s2) != 0);
return 0;
}

Kết quả:

Enter s1: Hang

Enter s2: Ho x = -1 => Hang < Ho

Enter s1: Hong Enter s2: Hon x = 1 => Hong > Hon

Enter s1: Hung Enter s2: hung x = -1 => Hung < hung

Enter s1: Quan Enter s2: Quan x = 0 => Quan = Quan

2. Nguyên tắc so sánh

Nguyên tắc so sánh 2 chuỗi đó là duyệt lần lượt 2 từng ký tự của 2 chuỗi. So sánh mã ACSII của 2 ký tự đó, mã ký tự nào lớn hơn tức là chuỗi lớn hơn và ngừng so sánh. Nếu một chuỗi nào hết ký tự để so sanh trước thì chuỗi đó bé hơn.

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 kieu string trong c năm 2024