×

Chuyển đổi chuỗi thành số nguyên với hàm atoi() trong C

Trong C, một trong những nhiệm vụ phổ biến là chuyển đổi chuỗi ký tự thành số nguyên. Để thực hiện điều này, ngôn ngữ C cung cấp nhiều hàm trong thư viện chuẩn, và một trong những hàm được sử dụng phổ biến nhất là atoi(). Hàm này rất hữu ích khi bạn cần xử lý đầu vào từ người dùng, đọc dữ liệu từ tệp hoặc xử lý các dữ liệu chuỗi mà bạn cần chuyển đổi thành các số nguyên để thực hiện các phép tính toán.

Cách hoạt động của hàm atoi()

Hàm atoi() là viết tắt của "ASCII to Integer" và được định nghĩa trong thư viện stdlib.h. Cách sử dụng hàm này rất đơn giản: bạn chỉ cần truyền vào chuỗi ký tự mà bạn muốn chuyển đổi, và hàm sẽ trả về giá trị số nguyên tương ứng.

Dưới đây là cú pháp của hàm atoi():

#include <stdlib.h>

int atoi(const char *str);

Ví dụ sử dụng hàm atoi()

Dưới đây là một ví dụ đơn giản minh họa cách sử dụng hàm atoi():

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str1[] = "12345";
    char str2[] = "-12345";
    char str3[] = "12345abc";
    
    int num1 = atoi(str1);
    int num2 = atoi(str2);
    int num3 = atoi(str3);
    
    printf("Chuỗi \"%s\" chuyển thành số %d\n", str1, num1);
    printf("Chuỗi \"%s\" chuyển thành số %d\n", str2, num2);
    printf("Chuỗi \"%s\" chuyển thành số %d\n", str3, num3);
    
    return 0;
}

Kết quả của ví dụ trên

Khi chạy chương trình trên, bạn sẽ thấy kết quả như sau:

Chuỗi "12345" chuyển thành số 12345
Chuỗi "-12345" chuyển thành số -12345
Chuỗi "12345abc" chuyển thành số 12345

Lưu ý khi sử dụng hàm atoi()

  1. Kí tự không hợp lệ: Hàm atoi() sẽ dừng chuyển đổi khi nó gặp phải một kí tự không phải là một phần của số nguyên. Ví dụ, với chuỗi "12345abc", hàm sẽ dừng lại khi tới kí tự 'a' và chuyển đổi phần "12345" thành số nguyên.

  2. Không có xử lý lỗi: Hàm atoi() không cung cấp cơ chế xử lý lỗi nếu chuỗi đầu vào không phải là một số hợp lệ. Vì vậy, nếu bạn truyền vào một chuỗi như "abc123", hàm sẽ trả về 0, và không có cách nào để biết chắc chắn rằng nó đã thất bại hay đó thực sự là số 0.

Sử dụng strtol() thay thế atoi()

Vì những hạn chế của atoi(), đôi khi bạn có thể muốn sử dụng hàm strtol(), một hàm mạnh mẽ hơn trong việc chuyển đổi chuỗi thành số nguyên, và nó cũng cung cấp cơ chế xử lý lỗi tốt hơn.

Cú pháp của hàm strtol() như sau:

#include <stdlib.h>

long int strtol(const char *str, char **endptr, int base);

Ví dụ sử dụng strtol():

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "12345abc";
    char *endptr;

    long int num = strtol(str, &endptr, 10);

    printf("Chuỗi \"%s\" chuyển thành số %ld\n", str, num);
    if (*endptr != '\0') {
        printf("Kí tự không chuyển đổi được bắt đầu từ: %s\n", endptr);
    }

    return 0;
}

Trong ví dụ này, endptr sẽ trỏ tới vị trí trong chuỗi mà quá trình chuyển đổi dừng lại, cho phép bạn kiểm tra chuỗi còn lại và biết chính xác phần nào của chuỗi không thể chuyển đổi.

Kết luận

Sử dụng hàm atoi() là một cách đơn giản và hiệu quả để chuyển đổi chuỗi thành số nguyên trong C, nhất là khi bạn chắc chắn rằng chuỗi đầu vào luôn hợp lệ. Tuy nhiên, với những trường hợp cần xử lý lỗi phức tạp hơn hoặc chuỗi không xác định rõ ràng, hãy cân nhắc sử dụng hàm strtol() để có được sự kiểm soát tốt hơn trong quá trình chuyển đổi.

Comments