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

Làm chủ hàm Itoa trong C: Hướng dẫn thực hành

Làm chủ hàm Itoa trong C: Hướng dẫn thực hành

Ngôn ngữ lập trình C ra đời hơn năm thập kỷ trước và từ đó đã trở thành một trong những ngôn ngữ phổ biến nhất. C nổi bật nhờ các đặc điểm như cấu trúc đơn giản, hàm, tính di động, quản lý bộ nhớ hiệu quả. Trong số đó, hàm là tài sản quan trọng nhất giúp lập trình viên viết mã mạnh mẽ.

Hàm itoa là một hàm không chuẩn được sử dụng rộng rãi để chuyển đổi kiểu dữ liệu. Nó nhận một số nguyên (int) làm đầu vào và chuyển thành chuỗi ký tự. Tuy nhiên, nhiều người chưa biết cách sử dụng nó. Hướng dẫn này giải thích ngắn gọn cách dùng hàm itoa trong C.

Cú pháp cơ bản

Dưới đây là ví dụ đơn giản minh họa cú pháp itoa:

int main() {
    int num = 12345;
    char str[20];
    itoa(num, str, 10);
    printf("Integer: %d\nString: %s\n", num, str);
    return 0;
}

Trong chương trình trên:

  1. num là số nguyên cần chuyển đổi.
  2. str là mảng ký tự lưu kết quả.
  3. 10 là cơ số (hệ thập phân).

Triển khai hàm itoa

Dưới đây là một triển khai mẫu của itoa kèm chương trình hoàn chỉnh:

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

void itoa(int num, char *str, int base) {
    int i = 0;
    int isNegative = 0;

    if (num == 0) {
        str[i++] = '0';
        str[i] = '\0';
        return;
    }

    if (num < 0 && base != 10) {
        isNegative = 1;
        num = -num;
    }

    while (num != 0) {
        int rem = num % base;
        str[i++] = (rem > 9) ? (rem - 10) + 'a' : rem + '0';
        num = num / base;
    }

    if (isNegative && base == 10)
        str[i++] = '-';

    str[i] = '\0';

    // Đảo ngược chuỗi vì các chữ số được lấy theo thứ tự ngược
    int start = 0;
    int end = i - 1;
    while (start < end) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
}

int main() {
    int num;
    printf("Nhập một số nguyên: ");
    if (scanf("%d", &num) != 1) {
        fprintf(stderr, "Đầu vào không hợp lệ. Vui lòng nhập số nguyên.\n");
        return EXIT_FAILURE;
    }

    int max_size = snprintf(NULL, 0, "%d", num) + 1;
    char *str = (char *)malloc(max_size);
    if (str == NULL) {
        fprintf(stderr, "Cấp phát bộ nhớ thất bại\n");
        return EXIT_FAILURE;
    }

    itoa(num, str, 10);
    printf("Số nguyên: %d\nChuỗi: %s\n", num, str);
    free(str);
    return 0;
}

Giải thích chi tiết

  • Khi num == 0, hàm gán ký tự '0' và kết thúc.
  • Nếu num < 0 và cơ số khác 10, đặt cờ âm và lấy giá trị tuyệt đối.
  • Vòng lặp while trích xuất từng chữ số (phép chia lấy dư), chuyển thành ký tự tương ứng (với cơ số > 10 dùng 'a'..'f').
  • Sau vòng lặp, nếu số ban đầu âm và cơ số 10, thêm dấu '-'.
  • Kết thúc chuỗi bằng '\0' và đảo ngược chuỗi vì các chữ số được sinh ra theo thứ tự ngược.

Chương trình cấp phát bộ nhớ cho chuỗi kết quả, gọi itoa, in ra màn hình và giải phóng bộ nhớ.

Làm chủ hàm Itoa trong C: Hướng dẫn thực hành

Nếu nhập không phải số nguyên, chương trình báo lỗi:

Làm chủ hàm Itoa trong C: Hướng dẫn thực hành

Kết luận

Bạn đã thấy cách triển khai và sử dụng hàm itoa trong C. Ví dụ này minh họa chuyển đổi số nguyên thành chuỗi; bạn có thể kết hợp itoa với nhiều hàm khác để xây dựng chương trình phức tạp hơn.

Tác giả

Làm chủ hàm Itoa trong C: Hướng dẫn thực hành

Prateek Jangid

Người dùng Linux đam mê, luôn khám phá và chia sẻ kiến thức mới về Linux.