Функция разделения строк - PullRequest
       0

Функция разделения строк

10 голосов
/ 07 октября 2011

Мне просто интересно, есть ли функция разделения строк?Что-то вроде:

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

Я не нашел его и создал свой.Время от времени я пользуюсь Схемой, поэтому буду благодарен, если вы исправите ее и предложите лучшее решение:

#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 ]

13 голосов
/ 07 октября 2011

Боже мой! Это много работы. Если я правильно понимаю вашу проблему, я бы использовал для этого regexp-split:

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

=>

Language: racket; memory limit: 256 MB.
'("bc" "thtn" "odnth")
7 голосов
/ 10 октября 2011

Так же, как справка для других Schemers, я сделал это в Chicken Scheme, используя irregex egg:

(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" "/" "-" "*")
5 голосов
/ 17 мая 2015

Ну, вы можете использовать простой старый string-split

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

Это часть ракетки http://docs.racket -lang.org / reference / strings.html #% 28def ._% 28% 28lib._racket% 2Fstring..rkt% 29._string-split% 29% 29

...