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

目录

1. 表达式        

算数操作符

关系操作符

逻辑操作符

按位操作符

选择操作符

数学函数

字符串操作

2. 字符串

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

字符串类型

字符的获取

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

字符串的比较

字符串的简单搜索

字符串的匹配

格式化输出


1. 表达式        

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

算数操作符

语法 结果 操作数类型
-a a的负值 整型、浮点型
+a 对a作一元加操作 整型、浮点型
a+b a加b 整型、浮点型
a-b a减b 整型、浮点型
a*b a乘以b 整型、浮点型
a/b a除以b 整型、浮点型
a%b a除以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&b a和b按位与 整型
a|b a和b按位或 整型
a^b a和b按位异或 整型
~a a按位取反 整型
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 可识别为布尔型的值“是”
integer 32位整型值
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零基础入门与案例实战》

相关推荐

  1. 学习笔记】lambda表达式

    2024-04-07 21:48:03       25 阅读
  2. Cpp之旅(学习笔记)第10章 字符串和正则表达式

    2024-04-07 21:48:03       47 阅读
  3. python学习笔记 -- 字符串

    2024-04-07 21:48:03       51 阅读
  4. 学习笔记:正则表达式

    2024-04-07 21:48:03       37 阅读
  5. TCL学习笔记(持续更新)

    2024-04-07 21:48:03       56 阅读
  6. C#学习笔记_字符串特点

    2024-04-07 21:48:03       51 阅读
  7. 格式化字符串漏洞学习笔记

    2024-04-07 21:48:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 21:48:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 21:48:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 21:48:03       82 阅读
  4. Python语言-面向对象

    2024-04-07 21:48:03       91 阅读

热门阅读

  1. 免密登陆的办法以及设置登录界面的欢迎信息

    2024-04-07 21:48:03       44 阅读
  2. IPv4子网判断

    2024-04-07 21:48:03       37 阅读
  3. 题解:CF1941C(C. Rudolf and the Ugly String)

    2024-04-07 21:48:03       41 阅读
  4. 真正的力量:实力与人际关系的平衡艺术

    2024-04-07 21:48:03       36 阅读
  5. Go rand 随机数

    2024-04-07 21:48:03       32 阅读
  6. 19.删除链表的倒数第N个节点

    2024-04-07 21:48:03       34 阅读
  7. C++ [NOIP2006 普及组] 明明的随机数

    2024-04-07 21:48:03       42 阅读
  8. RabbitMQ交换机类型!!!

    2024-04-07 21:48:03       47 阅读
  9. 投资回报率ROI是什么意思?

    2024-04-07 21:48:03       33 阅读
  10. 《牛客》-C小红的字符串构造

    2024-04-07 21:48:03       40 阅读
  11. jq的跳转方法有哪些(补)

    2024-04-07 21:48:03       34 阅读