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}
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

比较字符串1 字符串2

按字典顺序比较 string1 和 string2。如果相等则返回 0,如果 string1 在 string2 之前则返回 -1,否则返回 1。

2

第一个字符串1 字符串2

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

3

索引字符串索引

返回索引处的字符。

4

最后一个字符串1 字符串2

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

5

长度字符串

返回字符串的长度。

6

匹配模式字符串

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

7

范围字符串索引1索引2

返回字符串中从索引1到索引2的字符范围。

8

下弦_

返回小写字符串。

9

上弦_

返回大写字符串。

10

修剪字符串?修剪字符?

删除字符串两端的修剪字符。默认的修剪字符是空格。

11

修剪左字符串?修剪字符?

删除字符串左开头的修剪字符。默认的修剪字符是空格。

12

修剪右字符串?修剪字符?

删除字符串左端的修剪字符。默认的修剪字符是空格。

13

wordend查找字符串索引

返回包含索引处字符的单词之后的字符在 findstring 中的索引。

14

wordstart查找字符串索引

返回包含索引处字符的单词中第一个字符在 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 "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

扫描命令

Scan 命令用于根据格式说明符解析字符串。下面显示了一些示例。

现场演示
#!/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