Strcmp c++ là gì

Mọi người cho em hỏi hàm strcmp() trong C dùng để so sánh hai chuỗi kí tự, nhiều tài liệu nói là so sánh “độ dài” hai chuỗi, “dài hơn”, “ngắn hơn”;… Vậy thực chất cái “độ dài”, “dài hơn”, “ngắn hơn” là gì và giá trị trả về của hàm cho ta biết chính xác điều gì ạ?

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.

Hàm int strcmp(const char*s1, const char *s2) là hàm dùng để so sánh hai chuỗi với nhau. Hàm sẽ so sánh hai chuỗi với nhau và trả về các giá trị tương ứng.

Cú pháp:

int strcmp(const char*s1, const char *s2)

Ta có A[] và B[]

  • Nếu A[] > B[], kết quả trả về là 1
  • Nếu A[] == B[], kết quả trả về là 0
  • Nếu A[] < B[], kết quả trả về là -1

Hàm strcmp sẽ so sánh từng hai phần tử của hai chuỗi có cùng vị trí với nhau.

Cách so sánh giống với các so sánh 2 số thực. Tức là chỉ cần 1 phần tử của mảng A[] lớn hơn phần tử cùng vị trí của mảng B[] thì mảng A[] sẽ lớn hơn mảng B[]. Ví dụ  X = 3.14160 và Y = 3.14159 thì ta có X > Y.

Hàm int strcmp(const char *str1, const char *str2) so sánh chuỗi được trỏ tới bởi sr1 với chuỗi được trỏ tới bởi srt2.

Khai báo hàm strcmp() trong C

Dưới đây là phần khai báo cho strcmp() trong C:

int strcmp(const char *str1, const char *str2)

Tham số

  • str1 -- Đây là chuỗi đầu tiên để được so sánh.

  • str2 -- Đây là chuỗi thứ hai để được so sánh.

Trả về giá trị

Hàm này trả về các giá trị như sau:

  • Nếu giá trị trả về < 0 thì hàm này chỉ rằng str1 là ngắn hơn str2.

  • Nếu giá trị trả về > 0 thì hàm này chỉ rằng str2 là ngắn hơn str1.

  • Nếu giá trị trả về = 0 thì hàm này chỉ rằng str1 là bằng str2.

Ví dụ

Chương trình C sau minh họa cách sử dụng của strncmp() trong C:

#include 
#include 

int main ()
{
   char str1[15];
   char str2[15];
   int ret;


   strcpy(str1, "abcdef");
   strcpy(str2, "ABCDEF");

   ret = strcmp(str1, str2);

   if(ret < 0)
   {
      printf("Chuoi str1 la ngan hon chuoi str2");
   }
   else if(ret > 0) 
   {
      printf("Chuoi str2 la ngan hon chuoi str1");
   }
   else 
   {
      printf("Chuoi str1 la bang chuoi str2");
   }
   
   return(0);
}

Biên dịch và chạy chương trình C trên sẽ cho kết quả:

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Strcmp c++ là gì

Strcmp c++ là gì

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.