zl程序教程

您现在的位置是:首页 >  其它

当前栏目

Scheme的字符串操作

操作 字符串 Scheme
2023-09-11 14:16:08 时间

字符串操作是任何一门编程语言中最常用的操作之一,scheme也提供了一系列procudure来操作字符串。

1、字符串的比较,有6个,分别是string=?  string ? string ? string =? string =?

这与其他语言中对string的比较并无不同,比较字符和长度。

例子:
(string=? "mom" "mom")  graphic  #t
(string ? "mom" "mommy")  graphic  #t
(string ? "Dad" "Dad")  graphic  #f
(string=? "Mom and Dad" "mom and dad")  graphic  #f
(string ? "a" "b" "c")  graphic  #t

注意这些比较操作是大小写敏感。相应的,大小写不敏感的版本:

procedure: (string-ci=? string1 string2 string3 ...)
procedure: (string-ci ? string1 string2 string3 ...)
procedure: (string-ci ? string1 string2 string3 ...)
procedure: (string-ci =? string1 string2 string3 ...)
procedure: (string-ci =? string1 string2 string3 ...)

2、从字符构造字符串,使用string过程
(string #\a)  = "a"
(string #\a #\b #\c)  = "abc"

注意,换行字符是#\newline,回车字符是#\return

3、重复N个字符构造字符串
(make-string)  = ""
(make-string 4 #\a)  = "aaaa")

4、字符串长度 string-length
(string-length "") = 0
(string-length "dennis") = 6

5、取第N个字符,相当于java中的charAt:

(string-ref "hi there" 0)  graphic  #\h
(string-ref "hi there" 5)  graphic  #\e

6、修改字符串的第N个字符:
(string-set! "hello" 0 #\H) = "Hello"

7、拷贝字符串:
(let ((str "abc"))
  (eq? str (string-copy str)))  = #f
(let ((str "abc"))
  (equal? str (string-copy str)))  = #t

8、拼接字符串,string-append
(string-append) = ""
(string-append "abc" "defg") = "abcdefg"

9、截取子串
(substring "hi there" 0 1)  graphic  "h"
(substring "hi there" 3 6)  graphic  "the"
(substring "hi there" 5 5)  graphic  ""

10、填充字符串
(let ((str (string-copy "sleepy")))
  (string-fill! str #\Z)
  str)  graphic  "ZZZZZZ"

11、与list的相互转换

(string- list "")  graphic  ()
(string- list "abc")  graphic  (#\a #\b #\c)

(list- string ())  graphic  ""
(list- string (#\a #\b #\c))  graphic  "abc"
(list- string
  (map char-upcase
       (string- list "abc")))  graphic  "ABC"

文章转自庄周梦蝶  ,原文发布时间2009-10-12


scheme实现huffman编码的完整代码 来自sicp的完整代码,包括书中给出的代码以及习题,实现了huffman树的生成、解码、编码过程,总共67行代码,同样的代码有空用java、ruby改写下,看看会有什么不同。 (define (make-leaf symbol weight)  (list  leaf symbol wei