[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/3NjlYZ6s    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Sep 2:
; two string exercises

; remove duplicate characters from a string
(define (rem-dup-char str)
  (let ((seen (make-vector 256 #f)))
    (let loop ((cs (string->list str)) (zs (list)))
      (if (null? cs) (list->string (reverse zs))
        (let ((i (char->integer (car cs))))
          (if (vector-ref seen i) (loop (cdr cs) zs)
            (begin (vector-set! seen i #t)
                   (loop (cdr cs) (cons (car cs) zs)))))))))

(display (rem-dup-char "aaabbb")) (newline)
(display (rem-dup-char "abcbd")) (newline)

; squash multiple spaces into a single space
(define (squash-space str)
  (if (string=? str "") str
    (let loop ((cs (cdr (string->list str)))
               (zs (list (string-ref str 0))))
      (if (null? cs) (list->string (reverse zs))
        (if (and (char=? (car cs) #\space)
                 (char=? (car zs) #\space))
            (loop (cdr cs) zs)
            (loop (cdr cs) (cons (car cs) zs)))))))

(display (squash-space "a b")) (newline)
(display (squash-space "a  b")) (newline)


Output:
1
2
3
4
ab
abcd
a b
a b


Create a new paste based on this one


Comments: