2011-10-07 34 views
10

Tôi chỉ tự hỏi liệu có chức năng chia chuỗi không? Một cái gì đó như:Chức năng tách chuỗi

> (string-split "19 2.14 + 4.5 2 4.3/- *") 
'("19" "2.14" "+" "4.5" "2" "4.3" "/" "-" "*") 

Tôi chưa tìm thấy nó và tạo của riêng tôi. Tôi thỉnh thoảng sử dụng Đề án vì vậy tôi sẽ biết ơn nếu bạn sửa chữa và đề xuất giải pháp tốt hơn:

#lang racket 

(define expression "19 2.14 + 4.5 2 4.3/- *") 

(define (string-split str) 

    (define (char->string c) 
    (make-string 1 c)) 

    (define (string-first-char str) 
    (string-ref str 0)) 

    (define (string-first str) 
    (char->string (string-ref str 0))) 

    (define (string-rest str) 
    (substring str 1 (string-length str))) 

    (define (string-split-helper str chunk lst) 
    (cond 
    [(string=? str "") (reverse (cons chunk lst))] 
    [else 
    (cond 
     [(char=? (string-first-char str) #\space) (string-split-helper (string-rest str) "" (cons chunk lst))] 
     [else 
     (string-split-helper (string-rest str) (string-append chunk (string-first str)) lst)] 
     ) 
    ] 
    ) 
) 

    (string-split-helper str "" empty) 
) 

(string-split expression) 
+3

Bạn nên đặt dấu ngoặc đóng cửa của bạn trên cùng một dòng như biểu thức cuối cùng. Đây không phải là C :) – erjiang

+2

Không, nên làm bất cứ điều gì bạn thích. – rightfold

Trả lời

13

Oh my! Đó là rất nhiều công việc. Nếu tôi hiểu vấn đề của bạn một cách chính xác, tôi sẽ sử dụng regexp-chia cho điều này:

 
#lang racket 
(regexp-split #px" " "bc thtn odnth") 

=>

 
Language: racket; memory limit: 256 MB. 
'("bc" "thtn" "odnth") 
+3

Thông thường một cái gì đó như '#px '+" 'hoặc' #px "[[: dấu cách:]]" 'thích hợp hơn. (Trong trường hợp đó là ý định.) –

6

Cũng giống như một tài liệu tham khảo cho mưu khác, tôi đã làm điều này trong Gà Đề án sử dụng irregex trứng :

(use irregex) 

(define split-regex 
    (irregex '(+ whitespace))) 

(define (split-line line) 
    (irregex-split split-regex line)) 

(split-line "19 2.14 + 4.5 2 4.3/- *") => 
("19" "2.14" "+" "4.5" "2" "4.3" "/" "-" "*") 
+1

Nếu bạn không muốn sao chép định nghĩa đó mỗi lần, '(string-split)' cũng là một phần của trứng 'coops', trong đó có một số thứ tốt đẹp khác. Thật không may nó không được ghi trên trang tài liệu của nó. – user1610406

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