2012-02-23 37 views
18

C++ thực hiện Phải thiết lập các ký tự '0' - '9' có giá trị số liền kề nhau, tức là để:Số ký tự ['0' .. '9'] có bắt buộc phải có các giá trị số liên tiếp không?

'0' -> 0+n 
'1' -> 1+n 
m -> m+n 
'9' -> 9+n 

tôi không thể tìm thấy nó được đề cập trong tài liệu hướng dẫn của isdigit ([phân loại] (22,3. 3.1 phân loại nhân vật)) *, cũng không phải tôi có thể tìm thấy nó trong tài liệu hướng dẫn địa phương (nhưng có lẽ tôi đã không nhìn cứng đủ).

Trong 2.3 tập kí tự, chúng tôi thấy rằng

Các cơ bản bộ ký tự nguồn bao gồm 96 ký tự: nhân vật không gian, các ký tự điều khiển đại diện cho tab ngang, tab dọc, thức ăn dạng, và mới-line , cộng với 91 ký tự đồ họa sau

Nhưng nó không đề cập đến bất kỳ thứ tự nào (nhưng có lẽ tôi không đủ cứng).


*: Thú vị chú thích có:

Khi được sử dụng trong vòng một, nó là nhanh hơn để bộ nhớ cache CType <> khía cạnh và sử dụng nó trực tiếp [thay vì isdigit() et al, end comment], hoặc sử dụng dạng vector của ctype <> :: is.

+9

Tại sao bỏ phiếu-cho-gần: 'Câu hỏi này không phải là một sự phù hợp tốt để Q & A của chúng tôi định dạng. Chúng tôi hy vọng câu trả lời thường liên quan đến sự kiện, tài liệu tham khảo hoặc chuyên môn cụ thể; Tôi có các sự kiện, tài liệu tham khảo, chuyên môn cụ thể, và câu trả lời có lẽ sẽ không liên quan đến việc thu hút ý kiến, tranh luận, tranh cãi, bỏ phiếu, mà là một tham chiếu hoàn toàn vào tiêu chuẩn. , vì vậy không có thảo luận mở rộng? Có ai đó cao quyền hạn mod không? –

+0

Nó không phải trong công cụ địa phương, bởi vì điều đó phải đối phó với các chữ số khác quá. (Ví dụ: 'Ⅿ';)) – MSalters

Trả lời

22

Thực tế không đủ khó khăn: Trong 2.3. bộ ký tự, mục 3:

Trong cả hai nguồn và thực hiện các bộ ký tự cơ bản, giá trị của mỗi nhân vật sau 0 trong trên danh sách các chữ số thập phân sẽ một lớn hơn giá trị của trước.

Và đây là trên danh sách các chữ số thập phân:

0 1 2 3 4 5 6 7 8 9 

Do đó, một thực hiện phải sử dụng một bộ ký tự mà các chữ số thập phân có một đại diện tiếp giáp. Do đó, tối ưu hóa nơi bạn dựa vào thuộc tính này là an toàn; Tuy nhiên, tối ưu hóa, nơi bạn dựa vào coniguity các chữ số khác (ví dụ 'a' .. 'z') là không w.r.t. di động theo tiêu chuẩn (xem thêm tiêu đề <cctype>). Nếu bạn làm điều này, hãy chắc chắn để xác nhận rằng tài sản.

+0

Cảm ơn @cao vì gợi ý. Kinh ngạc. –

+1

Khi điều đó xảy ra, cả ASCII (và các dẫn xuất của nó) và EBCDIC chỉ định các giá trị tiếp giáp với các chữ số thập phân. ASCII làm cho các chữ thường tiếp giáp với nhau, cũng như các chữ in hoa; EBCDIC thì không. Đó có thể là lý do tại sao C và C++ yêu cầu các chữ số liên tiếp, nhưng không yêu cầu chữ cái liên tiếp. Phần lớn các triển khai C++ sử dụng ASCII hoặc một trong các dẫn xuất của nó (Latin-1, Windows-1252, Unicode, v.v.); phần lớn số còn lại sử dụng EBCDIC. –

+0

tôi nghĩ rằng điều này nên được chấp nhận như là một câu trả lời và đóng cửa! –