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

目录

[1. 表达式](#1. 表达式)

算数操作符

关系操作符

逻辑操作符

按位操作符

选择操作符

数学函数

字符串操作

[2. 字符串](#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零基础入门与案例实战》

相关推荐
青椒大仙KI1124 分钟前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类
liangbm31 小时前
数学建模笔记——动态规划
笔记·python·算法·数学建模·动态规划·背包问题·优化问题
GoppViper1 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
Charles Ray2 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码2 小时前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
我要吐泡泡了哦3 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1233 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
一口一口吃成大V4 小时前
FPGA随记——FPGA时序优化小经验
fpga开发
贾saisai5 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫5 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习