Tcl 字符串
Tcl 的原始数据类型是字符串,通常我们可以将 Tcl 视为仅支持字符串的语言。这些字符串可以包含字母数字字符、仅数字、布尔值,甚至二进制数据。Tcl 使用 16 位 Unicode 字符,字母数字字符可以包含拉丁字符外的字母、数字或标点符号。
布尔值可以用 1、yes 或者 true 表示 true,用 0、no 或者 false 表示 false。
字符串表示
与其他语言不同,Tcl 中当字符串只有一个单词时,不需要加双引号。一个示例可以是−
#!/usr/bin/tclsh
set myVariable hello
puts $myVariable
当上述代码被执行时,会产生以下结果−
hello
当我们想表示多个字符串时,可以使用双引号或花括号。如下所示-
#!/usr/bin/tclsh
set myVariable "hello world"
puts myVariable
set myVariable {hello world}
putsmyVariable
当执行上述代码时,会产生以下结果:
hello world
hello world
字符串转义序列
字符字面量可以是普通字符(例如,’x’),转义序列(例如,’\t’),或者通用字符(例如,’\u02C0’)。
在Tcl中,当某些字符在前面加上反斜杠时,它们将具有特殊含义,并用于表示换行符(\n)或制表符(\t)等。这里列举了一些常见的转义序列代码:
Escape sequence | Meaning
—|—
\\ | \ character
\’ | ‘ character
\” | ” character
\? | ? character
\a | Alert or bell
\b | Backspace
\f | Form feed
\n | Newline
\r | Carriage return
\t | Horizontal tab
\v | Vertical tab
以下是显示一些转义序列字符的示例:
#!/usr/bin/tclsh
puts "Hello\tWorld\n\nTutorialspoint";
当以上代码被编译并执行时,将产生以下结果−
Hello World
Tutorialspoint
字符串命令
字符串命令的子命令列表如下表所示:
序号 | 方法与描述 |
---|---|
1 | compare string1 string2 按字典顺序比较string1和string2。如果相等返回0,如果string1在string2之前返回-1,否则返回1。 |
2 | first string1 string2 返回string2中string1第一次出现的索引。如果没有找到,返回-1。 |
3 | index string index 返回索引处的字符。 |
4 | last string1 string2 返回string2中string1最后一次出现的索引。如果没有找到,返回-1。 |
5 | length string 返回字符串的长度。 |
6 | match pattern string 如果字符串与pattern匹配,则返回1。 |
7 | range string index1 index2 返回字符串中从index1到index2的字符。 |
8 | tolower string 返回小写字符串。 |
9 | toupper string 返回大写字符串。 |
10 | trim string ?trimcharacters? 去掉string两端的trimcharacters。默认的trimcharacters是空白字符。 |
11 | trimleft string ?trimcharacters? 去掉string左开始的trimcharacters。默认的trimcharacters是空白字符。 |
12 | trimright string ?trimcharacters? 去掉string右结束的trimcharacters。默认的trimcharacters是空白字符。 |
13 | wordend findstring index 返回包含索引位置的字符的单词后面的字符在findstring中的索引。 |
14 | wordstart findstring index 返回包含索引位置的字符的单词中的第一个字符在findstring中的索引。 |
下面是一些常用的Tcl字符串子命令的示例。
字符串比较
#!/usr/bin/tclsh
set s1 "Hello"
set s2 "World"
set s3 "World"
puts [string compare s1s2]
if {[string compare s2s3] == 0} {
puts "String \'s1\' and \'s2\' are same.";
}
if {[string compare s1s2] == -1} {
puts "String \'s1\' comes before \'s2\'.";
}
if {[string compare s2s1] == 1} {
puts "String \'s2\' comes after \'s1\'.";
}
当以上代码被编译和执行时,会产生以下结果 −
-1
String 's1' and 's2' are same.
String 's1' comes before 's2'.
String 's2' comes after 's1'.
索引字符串
#!/usr/bin/tclsh
set s1 "Hello World"
set s2 "o"
puts "First occurrence of s2 in s1"
puts [string firsts2 s1]
puts "Character at index 0 in s1"
puts [string indexs1 0]
puts "Last occurrence of s2 in s1"
puts [string lasts2 s1]
puts "Word end index in s1"
puts [string wordends1 20]
puts "Word start index in s1"
puts [string wordstart $s1 20]
当上面的代码被编译和执行时,它产生以下结果 –
First occurrence of o in s1
4
Character at index 0 in s1
H
Last occurrence of o in s1
7
Word end index in s1
11
Word start index in s1
6
字符串长度
#!/usr/bin/tclsh
set s1 "Hello World"
puts "Length of string s1"
puts [string length $s1]
当上述代码被编译和执行时,产生以下结果 –
Length of string s1
11
处理案件
#!/usr/bin/tclsh
set s1 "Hello World"
puts "Uppercase string of s1"
puts [string toupper s1]
puts "Lowercase string of s1"
puts [string tolowers1]
当上面的代码被编译和执行时,将产生以下结果−
Uppercase string of s1
HELLO WORLD
Lowercase string of s1
hello world
修整字符
#!/usr/bin/tclsh
set s1 "Hello World"
set s2 "World"
puts "Trim right s2 ins1"
puts [string trimright s1s2]
set s2 "Hello"
puts "Trim left s2 ins1"
puts [string trimleft s1s2]
set s1 " Hello World "
set s2 " "
puts "Trim characters s1 on both sides of s2"
puts [string trim s1s2]
当上述代码被编译并执行时,它产生以下结果−
Trim right World in Hello World
Hello
Trim left Hello in Hello World
World
Trim characters s1 on both sides of s2
Hello World
匹配字符串
#!/usr/bin/tclsh
set s1 "test@test.com"
set s2 "*@*.com"
puts "Matching pattern s2 in s1"
puts [string match "*@*.com" s1 ]
puts "Matching pattern tcl in s1"
puts [string match {tcl}s1]
当上述代码被编译和执行时,它产生以下结果 −
Matching pattern s2 in s1
1
Matching pattern tcl in s1
0
追加命令
#!/usr/bin/tclsh
set s1 "Hello"
append s1 " World"
puts $s1
当以上代码被编译和执行时,会产生以下结果−
Hello World
格式命令
下表显示了Tcl中可用的格式说明符列表-
指示符 | 用途 |
---|---|
%s | 字符串表示 |
%d | 整数表示 |
%f | 浮点数表示 |
%e | 浮点数表示(使用尾数-指数形式) |
%x | 十六进制表示 |
下面给出了一些简单的示例:
#!/usr/bin/tclsh
puts [format "%f" 43.5]
puts [format "%e" 43.5]
puts [format "%d %s" 4 tuts]
puts [format "%s" "Tcl Language"]
puts [format "%x" 40]
当上述代码被编译和执行时,将产生以下结果−
43.500000
4.350000e+01
4 tuts
Tcl Language
28
扫描命令
扫描命令用于根据格式说明符解析字符串。以下是一些示例。
#!/usr/bin/tclsh
puts [scan "90" {%[0-9]} m]
puts [scan "abc" {%[a-z]} m]
puts [scan "abc" {%[A-Z]} m]
puts [scan "ABC" {%[A-Z]} m]
当上述代码被编译和执行时,它产生以下结果 −
1
1
0
1