- (string-replace-chars-strings
- string '((#\& . "&") (#\> . ">") (#\< . "<"))))
-
-(defun string-replace-char-string (string repl-char repl-str)
- "Replace all occurances of repl-char with repl-str"
- (declare (simple-string string))
- (let ((count (count repl-char string)))
- (declare (fixnum count))
- (if (zerop count)
- string
- (locally (declare (optimize (speed 3) (safety 0)))
- (let* ((old-length (length string))
- (repl-length (length repl-str))
- (new-string (make-string (the fixnum
- (+ old-length
- (the fixnum
- (* count
- (the fixnum (1- repl-length)))))))))
- (declare (fixnum old-length repl-length)
- (simple-string new-string))
- (let ((newpos 0))
- (declare (fixnum newpos))
- (dotimes (oldpos (length string))
- (declare (fixnum oldpos))
- (if (char= repl-char (schar string oldpos))
- (dotimes (repl-pos repl-length)
- (declare (fixnum repl-pos))
- (setf (schar new-string newpos) (schar repl-str repl-pos))
- (incf newpos))
- (progn
- (setf (schar new-string newpos) (schar string oldpos))
- (incf newpos)))))
- new-string)))))
-
-