2010-08-30 38 views
7

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

+1

Câu trả lời ngắn - không thử trong C :) –

+0

Bạn sẽ làm gì với luồng dữ liệu này? – pmod

+0

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

Trả lời

4

(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.

1

Ý 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 (.

Các vấn đề liên quan