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)。 在这里,您有一些此类转义序列代码的列表 −

转义序列 含义
\\ \ 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

返回 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

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

8

tolower string

返回小写字符串。

9

toupper string

返回大写字符串。

10

trim string ?trimcharacters?

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

11

trimleft string ?trimcharacters?

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

12

trimright string ?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 "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

append 命令

#!/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 命令

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