Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt giữa strncmp() và strcmp() trong C/C++

strncmp()

Hàm strncmp() so sánh chuỗi bên trái với chuỗi bên phải tối đa n ký tự. Hoạt động tương tự strcmp() nhưng giới hạn số ký tự so sánh.

  • Trả về > 0: Ký tự khác nhau đầu tiên của chuỗi trái có mã ASCII lớn hơn
  • Trả về < 0: Ký tự khác nhau đầu tiên của chuỗi trái có mã ASCII nhỏ hơn
  • Trả về 0: n ký tự đầu tiên của hai chuỗi giống hệt nhau

Cú pháp

int strncmp(const char *leftStr, const char *rightStr, size_t n);

Tham số

  • leftStr - Chuỗi thứ nhất
  • rightStr - Chuỗi thứ hai
  • n - Số ký tự tối đa so sánh

Ví dụ strncmp()

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "blank";
    char str2[] = "Hello World!";
    int result = strncmp(str1, str2, 1); // Chỉ so sánh 1 ký tự đầu
    
    if (result == 0)
        printf("Chuỗi bằng nhau (theo n ký tự)\n");
    else
        printf("Chuỗi khác nhau\n");
    
    printf("Giá trị trả về: %d\n", result); // 'b'(98) - 'H'(72) = 26
    return 0;
}

Kết quả

Chuỗi khác nhau
Giá trị trả về: 26

strcmp()

Hàm strcmp() so sánh toàn bộ hai chuỗi theo thứ tự từ điển (lexicographically), ký tự bởi ký tự cho đến khi gặp ký tự khác nhau hoặc ký tự NULL (\0).

Cú pháp

int strcmp(const char *leftStr, const char *rightStr);

Ví dụ strcmp()

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello World!";
    char str2[] = "Hello World!";
    int result = strcmp(str1, str2); // So sánh toàn bộ chuỗi
    
    if (result == 0)
        printf("Chuỗi giống hệt nhau\n");
    else
        printf("Chuỗi khác nhau\n");
    
    printf("Giá trị trả về: %d\n", result); // 'h'(104) - 'H'(72) = 32
    return 0;
}

Kết quả

Chuỗi khác nhau
Giá trị trả về: 32

Bảng so sánh tóm tắt

Đặc điểmstrcmp()strncmp()
So sánh bao nhiêu ký tựToàn bộ chuỗiTối đa n ký tự
Dừng khiGặp \0 hoặc khác nhauGặp \0, khác nhau, hoặc đủ n ký tự
An toàn hơnKhông (có thể đọc vượt bộ nhớ)Có (giới hạn độ dài)