Tcl chap3 字符串

本文介绍了Tcl中处理字符串的各种命令,包括获取长度、索引操作、字符添加与删除、替换、比较、搜索以及匹配。还讲解了使用format命令进行格式化输出的方法,如转换符和格式标志符的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串的长度与索引

  • 命令string length可以获取字符串中字符的个数。string length后跟一个参数,即字符串。

  • 命令string index可以通过索引值获取字符串指定位置的字符。string index后跟两个参数,第一个参数是字符串,第二个参数是索引值。索引值可以用数字表示(从0开始),也可以用end表示(最后一个字符的索引值为end,倒数第二个字符索引值为end-1)。

注意:当使用end±i(i为正整数)的形式表示索引值时,end±i中间不允许出现空格。

字符的索取

  • string range功能与string index类似,需要两个索引值,返回的是由两个索引值确定的范围内的所有字符,即返回一个子字符串。

  • string range后跟三个参数,第一个参数是字符串,第二个和第三个参数都是索引值。若第一个索引值大于第二个索引值,返回空字符。

字符串的添加

  • append可以在字符串末尾添加新的字符串,其后跟两个参数,第一个参数是变量名(对应待添加字符串的字符串),第二个参数是新的字符串。

  • append命令会直接修改原始变量的值,不会创建新的变量。

set str Hello
=> Hello
set v " Tcl"
=> Tcl
set str_new $str$v
=> Hello Tcl
append str $v
=> Hello Tcl
puts $str
=> Hello Tcl

字符的删除

  • string replace 可以删除指定索引范围内的字符。该命令后跟3个参数,第一个参数为字符串,第二个和第三个参数均为索引值。

  • 返回值是删除索引值范围内的字符后的剩余字符。

  • string replace不会修改原始字符串变量的值。

字符串的替换

  • 若string replace后跟4个参数,可以实现字符串的替换。其中,第4个参数为新的字符串,用于替换两个索引值确定的范围内的字符串。

  • 该命令返回替换后的字符串,不会修改原始字符串。

字符串的比较

  • string compare接收两个字符串参数,并对其进行比较。

  • 如果第一个字符串在字典中先于第二个字符串,则返回-1;如果第一个字符串在字典中后于第二个字符串,则返回1;如果两者相同,则返回0。

  • 添加命令-nocase可以不区分大小写

  • 添加命令-length i(i是正整数),可以限定支队前i个字符进行比较。

  • string equal命令用于判断两个字符串是否严格相等。若相等,则返回1,否则返回0。用法和string compare一致。

set str1 grey
=> grey
set str2 green
=> green
string compare $str1 $str2
=> 1
string compare $str2 $str1
=> -1
string compare Green green
=> -1
string compare -nocase Green green
=> 0
string compare -length 3 $str1 $str2
=> 0
string equal Green green
=> 0
string equal -nocase Green green
=> 0
string equal -length 3 grey green
=> 1

判断两个字符串是否严格相等,使用string equal,还可以使用“==”或者eq。从执行效率来看,string equal 和操作符eq更高效一些。

字符串的简单搜索

  • string first接收两个字符串参数,并在第2个字符串中从左至右搜索与第1个字符串相同的子字符串。如果找到,返回最开始找到子字符串开头字符的索引值;若找不到,返回-1。

  • string first可以添加第3个参数,用来指定开始搜索字符的索引值。表示从第几个字符开始搜索(从0开始)。

  • string last同样接收两个字符串参数,与string first不同,其在第2个字符串中从右至左搜索与第1个字符串相同的子字符串。

字符串的匹配

  • 命令string match用于通配符样式的匹配。

  • 通配符列表

字符

说明

*

可与零个或多个任意字符组成的字符串匹配

可与一个任意字符匹配

[chars]

可与chars中的任意一个字符匹配。chars可以是范围表达式,如a~z、0~9、A~Z等。由范围表达式确定的范围包括边界,如[a-c],那么a/b/c中任意一个字符都可与与之匹配。

\x

可与单个字符x匹配,用于指定会被特殊处理的字符,如“*”、“?”、“[]”、“\”

  • 注意:使用范围表达式时需要注意将模式字符串放在花括号中,否则Tcl解释器会把范围表达式中的中括号[]当做命令置换符来处理。

  • 范围表达式可以串联使用,从而构成较为复杂的模式字符串。

set p1 {*\?}
=> *\?
string match $p1 why?
=> 1
set p2 {*bus\[[0-4]\]}
=> *bus\[[0-4]\]
set str {bus[3]}
=> bus[3]
string match $p2 $str
=> 1

格式化输出

  • 命令format功能类似C语言中的printf。

  • 转换符如下表所示

转换符

功能说明

d

转换为有符号整数

u

转换为无符号整数

o

转换为无符号八进制数

x或X

转换为无符号十六进制数

c

转换为ASCII码

s

无转换(Tcl中一切都是字符串)

f

转换为浮点数

e或E

转换为科学计数形式

  • 此外,还可以使用位置符号“i$”(i是整数,表示对第i个参数进行转换,参数位置的起始索引为1)。

format {%1$x} 6 15 19
=> 6
format {%2$x} 6 15 19
=> f
set i 3
=> 3
format "%$i\$x" 6 15 19
=> 13
  • format显示结果时,默认是右对齐。若需要左对齐,则需要添加负号,同时还可以指明字段宽度。

  • 对于浮点数,可以设置精度

format "%s" abcd
=> abcd
format "%6s" abcd
=>   abcd
format "%-6s" abcd
=> abcd
format "%0-6s" abcd
=> abcd00
format "%06s" abcd
=> 00abcd
format "%6.2f" 3.14159
=>   3.14
format "%-6.2f" 3.14159
=> 3.14

格式标志符

功能说明

-

显示结果时左对齐

+

对于正数,显示时添加正号“+”

0

在实际字符长度小于指定字段宽度时,以0填充

#0

以八进制显示时,第一个字符为0(数字0)

#x

以十六进制显示时,前两个字符为0x

与字符串相关的其他命令

  • string totitle:将字符串转换为标题形式,即第一个字母大写

  • string toupper:将字符串中小写字母全部转换为大写字母

  • string tolower:将字符串中大写字母全部转换为小写字母

  • string trim:去除字符串开头和结尾处的裁剪字符

  • string trimleft:只去除字符串开头处的裁剪字符

  • string trimright:只去除字符串结尾处的裁剪字符

set str axbxxc
=> axbxxc
string trim $str abc
=> xbxx
string trimleft $str abc
=> xbxxc
string trimright $str abc
=> axbxx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值