当前位置: 首页 > news >正文

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

相关文章:

  • vue快速入门(七)内联语句
  • VMware虚拟机(Rocky9.3)硬盘扩容详细图文教程
  • #{} 和 ${}区别
  • 算法刷题Day27 | 39. 组合总和、40.组合总和II、131.分割回文串
  • FastGpt流程
  • Redis 持久化个人总结
  • 【算法】两数之和(暴力求解+哈希表)
  • 用tkinter来实现扫雷游戏
  • usb_camera传输视频流编码的问题记录!
  • Elasticsearch 聚合函数返回空数组|查询返回空内容 rs里有数据
  • 海康Ehome2.0与5.0设备接入EasyCVR视频汇聚平台时的配置区别
  • 穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地
  • webpack环境配置分类结合vue使用
  • 蓝桥杯算法题:最大比例
  • 金融企业区域集中库的设计构想和测试验证
  • @angular/forms 源码解析之双向绑定
  • [NodeJS] 关于Buffer
  • [译] React v16.8: 含有Hooks的版本
  • 【Leetcode】104. 二叉树的最大深度
  • Apache Spark Streaming 使用实例
  • conda常用的命令
  • Javascript Math对象和Date对象常用方法详解
  • js正则,这点儿就够用了
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MYSQL 的 IF 函数
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Spring核心 Bean的高级装配
  • 前端存储 - localStorage
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 大数据全解:定义、价值及挑战
  • # 透过事物看本质的能力怎么培养?
  • #预处理和函数的对比以及条件编译
  • (20050108)又读《平凡的世界》
  • (BFS)hdoj2377-Bus Pass
  • (Oracle)SQL优化技巧(一):分页查询
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (SpringBoot)第二章:Spring创建和使用
  • (办公)springboot配置aop处理请求.
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)jdk与jre的区别
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Scala的“=”符号简介
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Reactor简单使用教程
  • .Net 垃圾回收机制原理(二)
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET微信公众号开发-2.0创建自定义菜单
  • .pop ----remove 删除
  • []error LNK2001: unresolved external symbol _m
  • [20170705]diff比较执行结果的内容.txt