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零基础入门与案例实战》

相关推荐
CXDNW39 分钟前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0
使者大牙39 分钟前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
ssf-yasuo1 小时前
SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记
论文阅读·笔记·prompt
ajsbxi1 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
TeYiToKu1 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
dsywws1 小时前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
cuisidong19973 小时前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
乌恩大侠3 小时前
5G周边知识笔记
笔记·5g
上理考研周导师3 小时前
第二章 虚拟仪器及其构成原理
fpga开发
咔叽布吉4 小时前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测