Tôi đang viết chương trình đọc luồng dữ liệu và phân tích nó thành một số giá trị: số nguyên, số float, ký tự hoặc giá trị phức hợp chứa tập hợp các giá trị (có thể lồng nhau) . Làm thế nào tôi có thể đại diện cho điều đó trong C? Tôi đã nghĩ đến một liên minh của int
, float
, char
, sau đó có một chuỗi con trỏ đến các công đoàn như vậy cho giá trị hợp chất, nhưng không thể lồng nhau.Loại dữ liệu đại số tương đương trong C
Trả lời
(Tôi đang hình dung rằng bạn đang phân tích cú pháp tệp Xml)
Giả sử bạn có một loạt các nút. Mỗi nút có thể có một giá trị, nó có thể là một trong một tập hợp các anh chị em, và nó có thể có con. Điều đó sẽ cung cấp cho bạn cấu trúc như:
struct Node
{
DATA Value;
DATATYPE Type;
Node* nextSibling;
Node* firstChild;
};
DATA
có thể là công đoàn như bạn mô tả hoặc các biến riêng biệt. Tuy nhiên, vì bạn sẽ đọc các giá trị từ nó trong cùng một hình thức như bạn đã lưu trữ chúng, một liên minh nên được sử dụng tốt. DATATYPE
phải là một enum.
Ý của bạn là char
chứ không phải char[]
? Tất cả các giá trị char có thể được lưu trữ trong một int
. Cho rằng vấn đề, đó là một cược an toàn rằng tất cả các giá trị int
bạn muốn (và tất cả có thể int
giá trị trên máy tính của bạn) có thể được đại diện chính xác bởi double
.
Vì vậy, tôi đề xuất cấu trúc cây với double
tải trọng trong các nút. Sử dụng một số enum
để phân biệt loại, nếu cần. Bạn có thể đại diện cho một cây n-ary bằng cách sử dụng một con trỏ duy nhất và một liên kết danh sách "con trỏ tiếp theo" ... Wikipedia có một sơ đồ ở đâu đó nhưng tôi không thể tìm thấy nó: v (.
- 1. Cơ sở dữ liệu Java/C++ STL tương đương?
- 2. Loại dữ liệu đại số của Haskell: "pseudo-extend"
- 3. Loại tương đương OCaml
- 4. Wildcard tương đương trong C# Generics
- 5. python tương đương tương đương
- 6. Loại dữ liệu C nào có thể đại diện cho số nhị phân 40 bit?
- 7. Tương đương với C# ObservableCollection trong Java
- 8. iif tương đương trong C#
- 9. tương đương với loại dữ liệu Long trong postgresql là gì?
- 10. Tương đương Jaxb trong C#
- 11. Haskell: Dữ liệu đại số vs tuple
- 12. uniqueidentifier DataType tương đương Trong C#
- 13. C# memcpy tương đương
- 14. C++ Tương đương CString trong C#
- 15. C++ union để đại diện cho bộ nhớ dữ liệu và loại biến vô hướng C
- 16. C# ULONG_PTR Tương đương
- 17. Đúc giữa dữ liệu loại trong C#
- 18. Tương đương với các ký tự đại diện Java trong C# generics
- 19. Loại dữ liệu đại số ngoài các ngôn ngữ chức năng?
- 20. PHP PDO ODBC - Các kiểu dữ liệu không tương thích trong tương đương với toán tử
- 21. Ruby tương đương với dữ liệu Perl :: Dumper
- 22. C tương đương với ++ STL C
- 23. Tương đương Sscanf trong mục tiêu-C
- 24. Làm thế nào để thực hiện "Ord" cho các loại dữ liệu đại số trong Haskell?
- 25. Liệu C# có tương đương với modifier tin của Delphi
- 26. Java tương đương với loại lớp động C#?
- 27. Loại dữ liệu C# tương đương với ngày, giờ và thời gian chờ của SQL Server là gì?
- 28. Đi tương đương với một con trỏ void trong C
- 29. Liên kết cơ sở dữ liệu Oracle - MySQL tương đương?
- 30. F # tương đương với số
Câu trả lời ngắn - không thử trong C :) –
Bạn sẽ làm gì với luồng dữ liệu này? – pmod
Bạn có thể bao gồm một con trỏ đến trường hợp kế tiếp của liên minh để lưu trữ một danh sách các giá trị. – Leonid