CÁC HÀM C / C++
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Hàm strcmp() trong C/C++

Trong lập trình C/C++, việc xử lý chuỗi là một phần quan trọng và phổ biến. Đối với việc so sánh hai chuỗi, hàm strcmp() (string compare) là một công cụ mạnh mẽ được sử dụng để so sánh hai chuỗi ký tự. Hàm này không chỉ giúp chúng ta biết xem hai chuỗi có giống nhau hay không, mà còn cho phép chúng ta biết được thứ tự tương đối của chúng.

Trong bài này , mình sẽ tìm hiểu chi tiết về hàm strcmp(), cú pháp của nó, cách sử dụng, xử lý các trường hợp lỗi có thể xảy ra, so sánh với các hàm tương tự, cùng với các ví dụ minh họa và bài tập thực hành để nắm vững việc sử dụng hàm này. Hãy cùng tìm hiểu cùng freetuts nhé!

Cú pháp và cách sử dụng hàm strcmp() trong C/C++

Cú pháp của hàm strcmp()

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

Hàm strcmp() nhận vào hai tham số là hai con trỏ đến chuỗi ký tự (const char *str1 và const char *str2) mà bạn muốn so sánh.

Cách sử dụng hàm strcmp() để so sánh chuỗi

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

int main() {
    char str1[] = " Chào mừng bạn đến freetuts";
    char str2[] = " .net";

    int result = strcmp(str1, str2);

    if (result < 0) {
        printf("'%s' nhỏ hơn '%s'\n", str1, str2);
    } else if (result > 0) {
        printf("'%s' lớn hơn '%s'\n", str1, str2);
    } else {
        printf("'%s' bằng '%s'\n", str1, str2);
    }

    return 0;
}

Output (kết quả):

'Chào mừng bạn đến freetuts' lớn hơn ' .net'

Điều chỉnh cách sử dụng hàm strcmp() với các kiểu dữ liệu khác nhau

Hàm strcmp() chỉ có thể so sánh hai chuỗi ký tự. Để so sánh các kiểu dữ liệu khác nhau, bạn cần chuyển đổi chúng thành chuỗi ký tự trước khi sử dụng strcmp(). Dưới đây là một ví dụ:

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

int main() {
    int num1 = 10;
    int num2 = 20;

    // Chuyển đổi số nguyên thành chuỗi ký tự trước khi so sánh
    char str1[20], str2[20];
    sprintf(str1, "%d", num1);
    sprintf(str2, "%d", num2);

    int result = strcmp(str1, str2);

    if (result < 0) {
        printf("%d nhỏ hơn %d\n", num1, num2);
    } else if (result > 0) {
        printf("%d lớn hơn %d\n", num1, num2);
    } else {
        printf("%d bằng %d\n", num1, num2);
    }

    return 0;
}

Output (kết quả):

10 nhỏ hơn 20

Cách xử lý trường hợp lỗi khi sử dụng hàm strcmp() trong C/C++

Xử lý trường hợp tham số không hợp lệ

Khi sử dụng hàm strcmp(), cần đảm bảo rằng cả hai tham số đều là con trỏ hợp lệ và trỏ đến chuỗi ký tự. Nếu một trong hai tham số không hợp lệ, hành vi của hàm strcmp() sẽ không được đảm bảo.

Ví dụ:

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

int main() {
    char *str1 = NULL;
    char *str2 = "hello";

    // Sử dụng hàm strcmp() với tham số không hợp lệ
    int result = strcmp(str1, str2);

    printf("Result: %d\n", result); // Không đảm bảo kết quả

    return 0;
}

Output (kết quả):

Result: -1

Trong ví dụ trên, str1 là một con trỏ NULL, không trỏ đến bất kỳ vùng nhớ nào. Kết quả của việc sử dụng hàm strcmp() với tham số không hợp lệ là không định nghĩa.

Xử lý trường hợp khi chuỗi không kết thúc bằng ký tự null-terminator

Hàm strcmp() yêu cầu chuỗi kết thúc bằng ký tự null-terminator ('\0'). Nếu chuỗi không kết thúc bằng ký tự null-terminator, hành vi của hàm sẽ không được đảm bảo và có thể dẫn đến kết quả không chính xác hoặc tràn bộ nhớ.

Ví dụ:

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

int main() {
    char str1[] = {'h', 'e', 'l', 'l', 'o'};
    char str2[] = {'h', 'e', 'l', 'l', 'o'};

    // Không kết thúc chuỗi bằng null-terminator
    int result = strcmp(str1, str2);

    printf("Result: %d\n", result); // Kết quả không đảm bảo

    return 0;
}

Output (kết quả):

Result: 0

Trong ví dụ trên, hai chuỗi str1 và str2 không kết thúc bằng ký tự null-terminator. Kết quả của việc sử dụng hàm strcmp() không đảm bảo và có thể không chính xác.

So sánh với các hàm tương tự trong C/C++

So sánh với hàm strncmp()

Hàm strncmp() trong thư viện string.h cũng được sử dụng để so sánh hai chuỗi. Tuy nhiên, strncmp() cho phép chỉ định số lượng ký tự cần so sánh, giúp kiểm soát được vùng nhớ được so sánh và tránh được tràn bộ nhớ.

Ví dụ:

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

int main() {
    char str1[] = "freetutt.net";
    char str2[] = "freetuts.ne";
    
    // So sánh chỉ 4 ký tự đầu của hai chuỗi
    int result = strncmp(str1, str2, 4);

    if (result == 0) {
        printf("Chuỗi giống nhau\n");
    } else if (result < 0) {
        printf("Chuỗi 1 nhỏ hơn chuỗi 2\n");
    } else {
        printf("Chuỗi 1 lớn hơn chuỗi 2\n");
    }

    return 0;
}

Output (kết quả):

Chuỗi giống nhau

Trong ví dụ trên, hàm strncmp() chỉ so sánh 4 ký tự đầu của hai chuỗi str1 và str2, trả về kết quả là 0 vì chuỗi đầu tiên giống chuỗi thứ hai.

So sánh với toán tử so sánh (==, !=)

Toán tử so sánh (==, !=) cũng có thể được sử dụng để so sánh hai chuỗi. Tuy nhiên, nó chỉ so sánh địa chỉ của chuỗi, không so sánh nội dung của chúng.

Ví dụ:

#include <stdio.h>

int main() {
    char str1[] = "freetuts.net";
    char str2[] = "freetuts.net";
    
    if (str1 == str2) {
        printf("Hai chuỗi giống nhau\n");
    } else {
        printf("Hai chuỗi khác nhau\n");
    }

    return 0;
}

Output (kết quả):

Hai chuỗi khác nhau

Trong ví dụ trên, mặc dù hai chuỗi str1 và str2 chứa cùng nội dung, nhưng toán tử so sánh không trả về kết quả mong muốn vì chỉ so sánh địa chỉ của chúng.

Ví dụ minh họa hàm strcmp() trong C/C++

Ví dụ về cách sử dụng hàm strcmp() trong các tình huống khác nhau

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

int main() {
    char str1[] = "apple";
    char str2[] = "freetuts.net";
    char str3[] = "apple";

    // So sánh hai chuỗi str1 và str2
    int result1 = strcmp(str1, str2);
    if (result1 < 0) {
        printf("Chuỗi %s nhỏ hơn chuỗi %s\n", str1, str2);
    } else if (result1 > 0) {
        printf("Chuỗi %s lớn hơn chuỗi %s\n", str1, str2);
    } else {
        printf("Chuỗi %s giống chuỗi %s\n", str1, str2);
    }

    // So sánh hai chuỗi str1 và str3
    int result2 = strcmp(str1, str3);
    if (result2 < 0) {
        printf("Chuỗi %s nhỏ hơn chuỗi %s\n", str1, str3);
    } else if (result2 > 0) {
        printf("Chuỗi %s lớn hơn chuỗi %s\n", str1, str3);
    } else {
        printf("Chuỗi %s giống chuỗi %s\n", str1, str3);
    }

    return 0;
}

Output (kết quả)

Chuỗi apple nhỏ hơn chuỗi freetuts.net
Chuỗi apple giống chuỗi apple

Bài tập thực hành

Viết các đoạn mã sử dụng hàm strcmp() để so sánh chuỗi.

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

int main() {
    char str1[100], str2[100];

    printf("Nhập chuỗi thứ nhất: ");
    scanf("%s", str1);
    printf("Nhập chuỗi thứ hai: ");
    scanf("%s", str2);

    int result = strcmp(str1, str2);
    if (result < 0) {
        printf("Chuỗi %s nhỏ hơn chuỗi %s\n", str1, str2);
    } else if (result > 0) {
        printf("Chuỗi %s lớn hơn chuỗi %s\n", str1, str2);
    } else {
        printf("Chuỗi %s giống chuỗi %s\n", str1, str2);
    }

    return 0;
}

Output (kết quả)

Nhập chuỗi thứ nhất: 
Chào mừng bạn đến với freetuts.net
Nhập chuỗi thứ hai: Chuỗi Chào nhỏ hơn chuỗi mừng

Trong bài tập này, người dùng sẽ được yêu cầu nhập hai chuỗi từ bàn phím và chương trình sẽ so sánh chúng sử dụng hàm strcmp(), sau đó hiển thị kết quả so sánh.

Kết bài

Trong bài viết này, mình đã tìm hiểu về hàm strcmp() trong ngôn ngữ lập trình C/C++. Ta đã đi qua cú pháp và cách sử dụng hàm này để so sánh chuỗi, cũng như các trường hợp đặc biệt và cách xử lý khi gặp lỗi. Ngoài ra, thông qua các ví dụ minh họa và bài tập thực hành, chúng ta đã nắm vững cách sử dụng hàm strcmp() trong các tình huống khác nhau và hiểu rõ về cách thực hiện so sánh chuỗi trong C/C++.

Hy vọng rằng kiến thức này sẽ giúp bạn nắm vững và áp dụng hàm strcmp() một cách hiệu quả trong quá trình lập trình.

test php

Bài giải

-------------------- ######## --------------------

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Các hàm xử lý mảng đa chiều (array.h) trong C/C++

Các hàm xử lý mảng đa chiều (array.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý thời gian (time.h) trong C

Các hàm xử lý thời gian (time.h) trong C

Thread Pools và Parallel Algorithms trong C++

Thread Pools và Parallel Algorithms trong C++

Tạo và quản lý các Multithreading trong C++

Tạo và quản lý các Multithreading trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Try, Catch, và Throw của Exception Handling trong C++

Try, Catch, và Throw của Exception Handling trong C++

Cách sử dụng Lambda Expressions trong C++

Cách sử dụng Lambda Expressions trong C++

Sử dụng weak_ptr trong C++

Sử dụng weak_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng unique_ptr trong C++

Sử dụng unique_ptr trong C++

Tổng quan về Smart Pointers trong C++

Tổng quan về Smart Pointers trong C++

Sử dụng Iterators trong STL của C++

Sử dụng Iterators trong STL của C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng trong List trong C++

[Iterator] Sử dụng trong List trong C++

[STL] Sử dụng Vector trong C++

[STL] Sử dụng Vector trong C++

Tổng quan về Iterators trong C++

Tổng quan về Iterators trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

Top