Tcl学习笔记(二)——表达式、字符串

目录

1. 表达式        

算数操作符

关系操作符

逻辑操作符

按位操作符

选择操作符

数学函数

字符串操作

2. 字符串

字符串长度、大小写转换、裁剪、重复

字符串类型

字符的获取

字符串的添加、删除、替换

字符串的比较

字符串的简单搜索

字符串的匹配

格式化输出


1. 表达式        

表达式由操作数、操作符构成,以下都是一些基本的操作符。

算数操作符

语法结果操作数类型
-aa的负值整型、浮点型
+a对a作一元加操作整型、浮点型
a+ba加b整型、浮点型
a-ba减b整型、浮点型
a*ba乘以b整型、浮点型
a/ba除以b整型、浮点型
a%ba除以b取余整型
a**b指数:a的b次方整型、浮点型

当两个操作数之一为浮点型数据时,另一个操作数也会被转换为浮点型数据。

a/b和a%b的结果需要满足a=q*b+r且0≤|r|<|b|,r和q同符号(q为a除以b的商,r为余数)

关系操作符

语法结果操作数类型
a<b如果a小于b,则结果为1、否则为0整型、浮点型、字符串
a<=b如果a小于或等于b,则结果为1、否则为0整型、浮点型、字符串
a>b如果a大于b,则结果为1、否则为0整型、浮点型、字符串
a>=b如果a大于或等于b,则结果为1、否则为0整型、浮点型、字符串
a==b如果a等于b,则结果为1、否则为0整型、浮点型、字符串
a!=b如果a不等于b,则结果为1、否则为0整型、浮点型、字符串

逻辑操作符

语法结果操作数类型
a&&b逻辑与:如果a和b都不是0,则结果为1、否则为0整型、浮点型
a||b逻辑或:如果a和b不是0,则结果为1、否则为0整型、浮点型
!a逻辑非:如果a为0,则结果为1、否则为0整型、浮点型

按位操作符

语法结果操作数类型
a&ba和b按位与整型
a|ba和b按位或整型
a^ba和b按位异或整型
~aa按位取反整型
a<<b把a左移b位,低位补0整型
a>>b把a右移b位,高位补0整型

选择操作符

语法结果操作数类型
x?a:b如果x为真,则处理参数a、否则处理参数b整型、浮点型、字符串

数学函数

函数结果
abs(x)x的绝对值
fmod(x,y)x除以y的余数
max(arg,...)所有数值参数的最大值
min(arg,...)所有数值参数的最小值
pow(x,y)x的y次方
sqrt(x)x的平方根
hypot(x,y)x2+y2的平方根
exp(x)e的x次方
log(x)x的自然对数
log10(x)x的以10为底的对数
ceil(x)向上取整(不小于x的最小整数)
floor(x)向下取整(不大于x的最小整数)
round(x)对x进行四舍五入得到的整型值
rand()产生在[0,1]区间的伪随机浮点数
srand(x)使用整数种子x重设随机数生成器
bool(x)将可转换的表达式转换为布尔值,1为真、0为假
double(x)数值等于整型值x的实数
int(x)将x转换为整型值
wide(x)用至少64位位宽表示x的整型值

字符串操作

语法结果操作数类型
eq比较两个字符串是否相等,若相等,则返回1、否则返回0字符串
ne比较两个字符串是否不等,若不等,则返回1、否则返回0字符串

2. 字符串

        字符串由一系列字符构成,Tcl中的字符串并不一定要放在双引号中。

字符串长度、大小写转换、裁剪、重复

命令string length可获取字符串中字符的个数,该命令后有一个参数:字符串。

命令string totitle可将字符串转换为标题形式,即首字母大写,该命令后有一个参数:待转换字符串。

命令string toupper将字符串中的小写字母全部转换为大写字母表示,该命令后有一个参数:待转换字符串。

命令string tolower将字符串中的大写字母全部转换为小写字母表示,该命令后有一个参数:待转换字符串。

命令string trim可去除字符串开头和结尾处的裁剪字符,该命令后有两个参数:字符串、裁剪字符。

命令string trimleft只用于去除开头处的裁剪字符,该命令后有两个参数:字符串、裁剪字符。

命令string teimright只用于去除结尾处的裁剪字符,该命令后有两个参数:字符串、裁剪字符。

命令string repeat指定字符串的重复次数,该命令后有两个参数:字符串、重复次数,返回值为新生成的字符串。

字符串类型

命令string is确定字符类型,该命令后有两个参数:字符类型、字符串,如果字符串是指定的类型,则返回1、否则返回0。

字符类型测试对象
alnum全为Unicode字母或数字
alpha全为Unicode字母
ascii全为7位ASCII字符
boolean可识别为布尔型的值
digit全为Unicode数字
double双精度浮点值
false可识别为布尔型的值“非”
true可识别为布尔型的值“是”
integer32位整型值
lower全为Unicode小写字母
upper全为Unicode大写字母
punct全为Unicode标点符号
space全为Unicode空格符号
wordchar全为字母和连接符(主要指下划线)
xdigit全为十六进制数,包括0~9、a~f、A~F

字符的获取

命令string index可通过索引值获取指定位置的字符,该命令后有两个参数:字符串、索引值。

end为字符串中最后一个字符的索引值,end-1为倒数第二个字符的索引值,以此类推。

命令string range可通过两个索引值获取指定范围内的所有字符,该命令后有三个参数:字符串、索引值、索引值。

字符串的添加、删除、替换

命令append可以在字符串末尾添加新的字符串,该命令后有两个参数:变量名(对应待添加字符的字符串)、新的字符串,返回值为原字符串和新的字符串共同拼接的字符串。

命令string replace可以删除指定索引范围内的字符,该命令后有两个参数:字符串、索引值,返回值为删除索引值范围内的字符后的剩余字符。

命令string replace命令后跟随4个参数,就可以实现字符串的替换功能,其中第四个参数为新的字符串,用于替换两个索引值所确定范围内的字符串。该命令的返回值为替换后的字符串,原始字符串并没有改变。

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

字符串的比较

命令string compare接收两个字符串参数,并对其进行比较。如果第一个字符串在字典中先于第二个字符串,则返回-1;如果第一个字符串在字典中后于第二个字符串,则返回1;如果两者相同,则返回0.

命令string equal接收两个字符串参数,用于判断两者是否严格相等。若相等,则返回1,否则返回0。

string compare和string equal在对字符串进行比较时区分大小写,除非添加了-nocase选项。此外还可以设置-length选项(其后跟随一个正整数i),从而限定只对前i个字符进行比较。

字符串的简单搜索

命令string first接收两个字符串参数,并在第二个字符串中从左至右(从字符串头部至字符串尾部)搜索与第一个字符串相同的子字符串。如果可以找到,则返回最开始找到的子字符串开头字符的索引值,如果无法找到则返回-1。

命令string last与string first类似,但返回的是最右边的相同子字符串的开头字符的索引值。

字符串的匹配

命令string match用于通配符样式的匹配,该命令后有两个参数:模式字符串、待匹配的字符串,如果待匹配的字符串与模式字符串匹配,则返回1、否则返回0。

字符说明
*可与零个或多个任意字符组成的字符串匹配
?可与一个任意字符匹配
[chars]可与chars中的任意一个字符匹配。chars可以是范围表达式,如a~z、0~9、A~Z等。由范围表达式确定的范围包括边界,如[a-c],那么a、b、c中的任意一个字符都可与之匹配。
\x可与单个字符x匹配,用于指定会被特殊处理的字符,如*、?、[]、\

格式化输出

命令format有如下作用:(1)改变一个值的表现形式;(2)改变一个值的输出格式,该命令后有两个参数:格式字符串、待转换的值。

转换符功能说明
d转换为有符号整数
u转换为无符号整数
o转换为无符号八进制数
x或X转换为无符号十六进制数
c转换为ASCII码
s无转换(Tcl中的一切都是字符串)
f转换为浮点数
e或E转换为科学计数形式

参考文献:

《Tcl/Tk入门经典》
《Vivado/Tcl零基础入门与案例实战》

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tcl字符串正则表达式是一种用于匹配和搜索字符串的模式。Tcl正则表达式基于1003.2规范和一些Perl5扩展。它包含一个或多个约束或量化原子的连接。正则表达式可以使用不同的风格,包括扩展正则(ERE)、基本正则(BRE)和高级正则(ARE)。Tcl实现了高级正则表达式风格,它在ERE的基础上添加了一些重要的扩展。通常,正则表达式的风格由应用程序的方法指定。如果表达式以“:”开头,则剩余的表达式为高级正则表达式(ARE)。如果以“=”开头,则其余的表达式被视为普通字符。Tcl字符串正则表达式的语法为regexp ?optionalSwitches? patterns ?searchString? fullMatch subMatch1 ... subMatchn。[1][2] BRE与ERE在几个方面有所不同。在BRE中,字符“|”、“+”和“?”只是普通字符,没有与它们的功能等价的字符。边界的分隔符是“\{”和“\}”,而“{”和“}”本身为普通字符。嵌套子表达式的括号是“\(\)”和“\(\)”和“\(\)”,而“(”和“)”本身为普通字符。除了在正则表达式或圆括号子表达式的开头以外,“^”均为普通字符。除了在正则表达式或圆括号子表达式的末尾以外,“$”均为普通字符。如果“*”出现在正则表达式或圆括号子表达式的开头(或者有一个前导字符^),则为普通字符。只能使用个位数的反向引用。除了“\<”和“\>”等价于“[[:<:]]”和“[[:>:]]”之外,没有其他转义字符可用。[3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值