Tôi đang làm việc trên một bài tập và là một phần của nó, tôi cần trích xuất số nguyên từ một chuỗi.
Tôi đã thử sử dụng atoi()
hàm, nhưng nó luôn trả về a 0
, vì vậy sau đó tôi đã chuyển sang strtol()
, nhưng nó vẫn trả về a 0
.
Mục tiêu là trích xuất các số nguyên từ chuỗi và chuyển chúng dưới dạng đối số cho một hàm khác. Tôi đang sử dụng một hàm sau đó sử dụng các giá trị này để cập nhật một số dữ liệu ( update_stats
).
Xin lưu ý rằng tôi khá mới đối với lập trình bằng ngôn ngữ C, nhưng đây là nỗ lực của tôi:
void get_number (char str[]) {
char *end;
int num;
num = strtol(str, &end, 10);
update_stats(num);
num = strtol(end, &end, 10);
update_stats(num);
}
Mục đích của việc này là trong một chuỗi "e5 d8"
(ví dụ) tôi sẽ trích xuất 5
và 8
từ chuỗi đó.
Định dạng của chuỗi luôn giống nhau.
Tôi có thể làm cái này như thế nào?
isdigit
trước khi sử dụngstrtol
atoi
và strtol
mong đợi nhận được con trỏ tới ký tự đầu tiên của một chữ số. Con trỏ của bạn phải được trỏ đến một chữ số. Không phải là số điện tử hay dữ liệu là một chữ số khi cơ sở là 10. Để tìm các chữ số trong chuỗi, bạn nên viết mã để kiểm tra từng ký tự để xác định xem đó có phải là một chữ số hay không. Khi bạn đã tìm thấy một chữ số, bạn có thể chuyển đổi nó (chỉ một chữ số) hoặc chuỗi các chữ số (vài chữ số) ở đó thành một số, tùy thuộc vào nhu cầu của bạn là gì.
"e5 d8"
để strtol
không phải là một cách chính xác để tìm ra “5” và chuyển nó sang dạng số.