Tcl - 字符串

Tcl的原始数据类型是字符串,通常我们可以在Tcl上找到仅作为字符串语言的引号.这些字符串可以包含字母数字字符,只包含数字,布尔值甚至二进制数据. Tcl使用16位unicode字符,字母数字字符可以包含非拉丁字符,数字或标点符号.

布尔值可以表示为1,yes或true表示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).在这里,你有一些这样的转义序列代码列表 :

转义序列含义
\\\ character
\''character
""character
\??字符
\ a提醒或响铃
\ bBackspace
\f表格提要
\ n换行符
\ r回车
\ t水平标签
\v垂直标签

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

#!/usr/bin/tclsh

puts "Hello\tWorld\n\nTutorialspoint";

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

Hello   World

Tutorialspoint

字符串命令

列表string命令的子命令列在下表 :

Sr.No.方法&说明
1

compare string1 string2

以字面方式比较string1和string2.如果相等则返回0,如果string1在string2之前返回-1,则返回-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

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

7

range string index1 index2

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

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' 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]

当上面的代码被编译并执行时ted,它产生以下结果 :

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&minus中可用的格式说明符列表;

Specifier使用
%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