Scheme的字符串操作
Posted on 2009-10-12 17:59 dennis 閱讀(1913) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): 動(dòng)態(tài)語(yǔ)言 字符串操作是任何一門(mén)編程語(yǔ)言中最常用的操作之一,scheme也提供了一系列procudure來(lái)操作字符串。
1、字符串的比較,有6個(gè),分別是string=? string>? string<? string>=? string<=?
這與其他語(yǔ)言中對(duì)string的比較并無(wú)不同,比較字符和長(zhǎng)度。
例子:
(string=? "mom" "mom")
#t
(string<? "mom" "mommy")
#t
(string>? "Dad" "Dad")
#f
(string=? "Mom and Dad" "mom and dad")
#f
(string<? "a" "b" "c")
#t
注意這些比較操作是大小寫(xiě)敏感。相應(yīng)的,大小寫(xiě)不敏感的版本:
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、從字符構(gòu)造字符串,使用string過(guò)程
(string #\a) => "a"
(string #\a #\b #\c) => "abc"
注意,換行字符是#\newline,回車(chē)字符是#\return
3、重復(fù)N個(gè)字符構(gòu)造字符串
(make-string) => ""
(make-string 4 #\a) =>"aaaa")
4、字符串長(zhǎng)度 string-length
(string-length "") =>0
(string-length "dennis") => 6
5、取第N個(gè)字符,相當(dāng)于java中的charAt:
(string-ref "hi there" 0)
#\h
(string-ref "hi there" 5)
#\e
6、修改字符串的第N個(gè)字符:
(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)
"h"
(substring "hi there" 3 6)
"the"
(substring "hi there" 5 5)
""
10、填充字符串
(let ((str (string-copy "sleepy")))
(string-fill! str #\Z)
str)
"ZZZZZZ"
11、與list的相互轉(zhuǎn)換
(string->list "")
()
(string->list "abc")
(#\a #\b #\c)
(list->string '())
""
(list->string '(#\a #\b #\c))
"abc"
(list->string
(map char-upcase
(string->list "abc")))
"ABC"
1、字符串的比較,有6個(gè),分別是string=? string>? string<? string>=? string<=?
這與其他語(yǔ)言中對(duì)string的比較并無(wú)不同,比較字符和長(zhǎng)度。
例子:
(string=? "mom" "mom")

(string<? "mom" "mommy")

(string>? "Dad" "Dad")

(string=? "Mom and Dad" "mom and dad")

(string<? "a" "b" "c")

注意這些比較操作是大小寫(xiě)敏感。相應(yīng)的,大小寫(xiě)不敏感的版本:
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、從字符構(gòu)造字符串,使用string過(guò)程
(string #\a) => "a"
(string #\a #\b #\c) => "abc"
注意,換行字符是#\newline,回車(chē)字符是#\return
3、重復(fù)N個(gè)字符構(gòu)造字符串
(make-string) => ""
(make-string 4 #\a) =>"aaaa")
4、字符串長(zhǎng)度 string-length
(string-length "") =>0
(string-length "dennis") => 6
5、取第N個(gè)字符,相當(dāng)于java中的charAt:
(string-ref "hi there" 0)

(string-ref "hi there" 5)

6、修改字符串的第N個(gè)字符:
(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)

(substring "hi there" 3 6)

(substring "hi there" 5 5)

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

11、與list的相互轉(zhuǎn)換
(string->list "")

(string->list "abc")

(list->string '())

(list->string '(#\a #\b #\c))

(list->string
(map char-upcase
(string->list "abc")))
