#include <stdio.h>
#include <stdint.h>
void parse_csv_to_array(const char *str, uint8_t *arr, uint8_t *count) {
*count = 0;
int num = 0; // Dùng int để chứa số tạm thời, phòng trường hợp số lớn hơn 255
int read = 0; // Vị trí đọc hiện tại
// Lặp cho đến khi gặp ký tự kết thúc chuỗi
while (1) {
char ch = str[read];
// 1. Nếu là ký tự số
if (ch >= '0' && ch <= '9') {
// Xây dựng số: lấy số cũ * 10 rồi cộng số mới
num = num * 10 + (ch - '0');
}
// 2. Nếu là dấu phẩy HOẶC kết thúc chuỗi
else if (ch == ',' || ch == '\0') {
// Đây là thời điểm kết thúc một số
// Lưu số vừa đọc được vào mảng
arr[*count] = (uint8_t)num; // Ép kiểu về uint8_t
// Tăng biến đếm số lượng
(*count)++;
// Reset num về 0 để chuẩn bị cho số tiếp theo
num = 0;
// 3. Nếu là kết thúc chuỗi, thì thoát hẳn vòng lặp
if (ch == '\0') {
break;
}
}
// 4. Bỏ qua các ký tự khác (ví dụ: khoảng trắng)
// (Trong code này, chúng ta mặc định là chỉ có số và dấu phẩy)
// Chuyển sang ký tự tiếp theo
read++;
}
}
int main() {
char str[101];
fgets(str, sizeof(str), stdin);
// Remove newline
uint8_t i = 0;
while (str[i]) {
if (str[i] == '\n') {
str[i] = '\0';
break;
}
i++;
}
uint8_t arr[20];
uint8_t count = 0;
parse_csv_to_array(str, arr, &count);
for (uint8_t i = 0; i < count; i++) {
printf("%u", arr[i]);
if(i < count - 1){
printf(" ");
}
}
return 0;
}
Input
10,20,30
Expected Output
10 20 30