Tcl - 字符串



Tcl 的基本数据类型是字符串,并且我们经常可以发现 Tcl 作为一种仅限字符串的语言。这些字符串可以包含字母数字字符、仅数字、布尔值,甚至二进制数据。Tcl 使用 16 位 Unicode 字符,字母数字字符可以包含字母(包括非拉丁字母)、数字或标点符号。

布尔值可以用 1、yes 或 true 表示真,用 0、no 或 false 表示假。

字符串表示

与其他语言不同,在 Tcl 中,如果字符串只有一个单词,则不需要包含双引号。例如:

实时演示
#!/usr/bin/tclsh

set myVariable hello
puts $myVariable

执行上述代码时,将产生以下结果:

hello

当我们想要表示多个字符串时,可以使用双引号或花括号。如下所示:

实时演示
#!/usr/bin/tclsh

set myVariable "hello world"
puts $myVariable
set myVariable {hello world}
puts $myVariable

执行上述代码时,将产生以下结果:

hello world
hello world

字符串转义序列

字符字面量可以是普通字符(例如,'x')、转义序列(例如,'\t')或通用字符(例如,'\u02C0')。

在 Tcl 中,某些字符在前面加上反斜杠时具有特殊含义,它们用于表示换行符(\n)或制表符(\t)等。以下列出了一些此类转义序列代码:

转义序列 含义
\\ \ 字符
\' ' 字符
\" " 字符
\? ? 字符
\a 警报或铃声
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符

以下示例显示了一些转义序列字符:

实时演示
#!/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

返回 string1 在 string2 中第一次出现的索引。如果未找到,则返回 -1。

3

index string index

返回索引处的字符。

4

last string1 string2

返回 string1 在 string2 中最后一次出现的索引。如果未找到,则返回 -1。

5

length string

返回字符串的长度。

6

match pattern string

如果字符串与模式匹配,则返回 1。

7

range string index1 index2

返回字符串中从 index1 到 index2 的字符范围。

8

tolower string

返回小写字符串。

9

toupper string

返回大写字符串。

10

trim string ?trimcharacters?

删除字符串两端出现的 trimcharacters。默认的 trimcharacters 是空格。

11

trimleft string ?trimcharacters?

删除字符串开头出现的 trimcharacters。默认的 trimcharacters 是空格。

12

trimright string ?trimcharacters?

删除字符串末尾出现的 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 $s1 $s2]
if {[string compare $s2 $s3] == 0} {
   puts "String \'s1\' and \'s2\' are same.";
}

if {[string compare $s1 $s2] == -1} {
   puts "String \'s1\' comes before \'s2\'.";
}

if {[string compare $s2 $s1] == 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 first $s2 $s1]
puts "Character at index 0 in s1"
puts [string index $s1 0]
puts "Last occurrence of $s2 in s1"
puts [string last $s2 $s1]
puts "Word end index in s1"
puts [string wordend $s1 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 tolower $s1]

编译并执行上述代码时,将产生以下结果:

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 in $s1"
puts [string trimright $s1 $s2]

set s2 "Hello"
puts "Trim left $s2 in $s1"
puts [string trimleft $s1 $s2]

set s1 " Hello World "
set s2 " "
puts "Trim characters s1 on both sides of s2"
puts [string trim $s1 $s2]

编译并执行上述代码时,将产生以下结果:

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 "[email protected]" 
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
广告