字符串不替代_TI-Nspire 系列的字符串操作

93cab51082672785306b00f76ffed1b0.png
本文遵循 CC BY-NC-SA 协议。

一 前言

在编程中,对字符串进行操作是很常见的。但是TI-Nsipre 对字符进行操作的函数有限,缺少一些如在字符串中插入字符、删除字符等常用功能,给编程带来不便。笔者经过研究,实现了在字符串中插入字符、删除字符、拆分字符的方法,并将它们编写成了相应的函数,可以在编程中直接调用,提高了字符串处理编程的效率。

二 总览

TI-Nspire 系列中,字符串是操作系统自带数据类型之一。通过 GetType() 函数[1],我们可以求证这一点。

f1b33bff1df6aa4b969b2eadbeac4aa8.png
TI-BASIC 用 STR 表示字符串类型的变量

对于该数据类型,TI-BASIC 提供了多种操作函数,但并不完善 / 不符合直觉。本文旨在简述这些函数的应用,并实现一些常用功能。

接下来笔者将介绍它的一些奇怪之处,读者一定要注意。

1. 字符串和字符的关系

一般的编程语言中,字符串是字符数组的语法糖[2]。但在 TI-BASIC 中,并没有所谓“字符”的概念。如果想要表示“字符”,TI-BASIC 使用的是长度为 1 的字符串。

2. 随机访问

fb74c9d6279d3afd657dac53fcff91fb.png

由于 TI-BASIC 没有“字符”的概念,字符串也不是字符数组,自然不能使用下标随机访问字符。如果有随机访问的需求,需要使用函数替代。该操作在后文将会提到。

3. 与列表的关系

虽然 TI-BASIC 的字符串不是列表,但以下列出的许多函数都同时适用于列表和字符串。但很关键的一点是,countIf() 不支持字符串而仅支持列表。后文将给出笔者对 countIfStr() 的实现。

三 常用系统函数汇总

TI-BASIC 为字符串提供了多种函数和运算符。这些函数和运算符的说明在官方 reference 文档中分布过于散乱,在此处给出汇总。

1. dim(str) -> len

96372835736dbf00e6b78319e1a896f2.png

返回字符串 str 的长度 len。

2. mid(str, beg, len) -> substr

abc2d3b830ec54730b87a9ef1291761b.png

倒着dim(大雾,划掉)

返回字符串 str 从第 beg 位开始的长度为 len 的子字符串。

可以用于随机访问字符串中的某一个字符。

3. left(str, pos) -> substr

a29f39590324e3e9124f0a37042b0a2b.png

返回字符串 str 从左至右第 pos 个字符及以的所有字符组成的子字符串。

4. right(str, pos) -> substr

c3ba76b0d32bf5960d8921eaecc96357.png

返回字符串 str 从右至左第 pos 个字符及以的所有字符组成的子字符串。

5. inString(str, sub [, beg]) -> pos

7c6bf97371f925b13399361128e2746d.png

在字符串 str 中查找子字符串 sub,可选指定查找起始点 beg。

返回 sub 在 str 中第一次出现首位字符位置。

如果未找到,则返回 0。

6. expr(str) -> result

5520ec9bc4dc6a3e6e93d5ed89b92685.png

将字符串 str 当作表达式进行求值,返回计算结果。

CAS 机型能够计算含未知参数的表达式,而非 CAS 机型遇到未知参数将会报错。

值得注意的是,str 中如果存在 TI-BASIC 语句,也将会被正确执行。

ce8509497c352e72884acc92f9c82b2d.png

在 TI-BASIC 的传统中,冒号 (':') 会被作为换行的替代符号[3]。因此,即便TI-BASIC不支持转义字符,使用 expr 函数执行储存在字符串中的多行代码也是完全可行的。

结合其他字符串操作函数,该函数为今后实现类并进行面向对象编程,甚至函数式编程,打下了坚实的基础。

ps:亲爱的读者们,如果有人问你们,TI-BASIC 里边除了三角函数之外还有哪一对函数是在一个可用的函数后添加一个字符依然是可用函数名的,你们可以回答“exp() 和 expr()”。

7. string(expr) -> str

3ebd1c243bdfe455f25f7a5d7f6aafff.png

将表达式 expr 求值后的结果转换为字符串 str 并返回。

在计算过程中,CAS 机型会将未知参数名直接转换为字符串,非 CAS 机型会报错。

如果尝试将一个字符串转换为一个字符串,则它会被加上一对英文引号。

8. format(val, fmt) -> str

0baa0a86f9b7a4ec0e2d83eb1e246fe5.png
该图片中的示例数据来源于官方参考文档

将值 val 以格式控制字符串 fmt 指定的格式转化为字符串 str。

fmt 的可选格式引用自官方文档:

fmt 必须是如下形式的字符 串:“F[n]”、“S[n]”、“E[n]”、“G[n][c]”,其 中 [ ] 表示可选的部分。
F[n]:Fixed 格式。n 为小数点后显示的位数。
S[n]:Scientific 格式。n 为小数点后显示的位数。
E[n]:Engineering 格式。n 为第一个有效数字后的位数。指数将调整为三的倍数,并且小数点向右移零位、一位或两位。
G[n][c]:与固定格式相同,但也将小数点左边的数位每三个分为一组。如果 c 为句号,则小数点将显示为逗号。
[Rc]:上述指定符可以加上一个以 Rc 小数点标记的后缀,其中 c 是单个字符, 指明替代小数点的符号。

9. str1 & str2 (字符串联结运算符)

c266c8887646b6899e9e1c9ba93fdb0b.png

该运算符用于将两个字符串连接起来。可以连续使用。

10. #(str) (间接运算符)

c17998fd079818180df5543ccd762330.png

该运算符用于将字符串 str 转换为变量或函数名,以创建 / 修改 / 调用变量或函数。

11. char(int) -> str 和 ord(str) -> int

7699b91573f41c145a75d72e82ac2f43.png

这两个函数是一对。

char() 用于将整数参数 int 转换为其在 TI-Nspire 字符集中对应的字符组成的单字符字符串 str,而 ord(str) 将传入的字符串 str 的首位字符转化为其在 TI-Nspire 字符集中的序号 int。

12. 附注

TI-BASIC 还提供了一些令人不明用途的函数。

例如 rotate() 被用于字符串的用法,过于诡异以至于令人无法理解如何运用于实际,在此暂且不作说明。如果有兴趣,可以在 ReferenceGuide 中查找 rotate() 和 shift() 这两个函数。

四 常用功能实现

结合以上所有函数及常规编程知识,可以实现一些令字符串操作更加便捷的实用函数。

1. 在一个字符串 str 中的指定位置 pos 处插入一个子串 tgt

Define insert(str,pos,tgt)=
Func
Return left(str,pos-1) & tgt & right(str,dim(str)-pos+1)
EndFunc

2. 在一个字符串 str 中从指定位置 pos 开始,移除之后的 len 个字符

Define erase(str,pos,len)=
Func
Return left(str,pos-1)&right(str,dim(str)-(pos+len)+1)
EndFunc

3. countIf 的字符串版本

Define countifstr(str,chr)=
Func
Local i,cnt
0→cnt
For i,1,dim(str)If mid(str,i,1)=chr Thencnt+1→cntEndIf
EndFor
Return cnt
EndFunc

4. 以指定的 chr 为分隔符,将字符串 str 拆分为字符串单行矩阵

Define split(str,chr)=
Func
Local i,len,ls,cur,cnt
""→cur
1→cnt
countifstr(str,chr)+1→len
newMat(1,len)→ls
For i,1,dim(str)If mid(str,i,1)=chr Thencur→ls[1,cnt]cnt+1→cnt""→curElsecur&mid(str,i,1)→curEndIf
EndFor
cur→ls[1,cnt]
Return ls
EndFunc

5. 将字符串 str 拆分成字符单行矩阵

Define str2lst(str)=
Func
Local ls,i
newMat(1,dim(str))→ls
:For i,1,dim(str)mid(str,i,1)→ls[1,i]
EndFor
Return ls
EndFunc

6. 移除目标字符串 str 中的所有目标子字符串 sub

Define rmsub(str,sub)=
Func
Local ret
str→ret
While inString(ret,sub)≠0erase(ret,inString(ret,sub),dim(sub))→ret
EndWhile
Return ret
EndFunc

诸如此类的常用函数还能够实现很多。

五 结语

在 TI-BASIC 领域,字符串的应用空间极为广阔,而本文的这些总结和实现只是微不足道的一部分。

21 世纪是字符串的世纪(大雾),我们应当在字符串上投入足够的研究与思考,取得更好的成绩。

六 附件

stdstr.tns
3.6K
·
百度网盘

这是包含了本文中所有代码实现的库。函数均以 LibPub 方式声明,可以直接将该文件拷贝到计算器的 MyLib 目录下进行体验。

参考

  1. ^TI-BASIC 用于获取变量类型的函数
  2. ^比如 C 语言
  3. ^这个传统似乎是从 Z80 系列开始的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Win Server 2008R2环境下,把域帐户加到本地管理员组??

如何在Win Server 2008R2环境下,把域帐户加到本地管理员组 我们在大型企业中,经常不会用域管理员登陆,而是将某个OU下特定用户加入到全局组,或者将某个用户加入到本地管理员组中,但是局域网庞大,不可能一个…

3ds Max 2018 在安装后无法启动或出现不稳定

问题: 安装 3ds Max 2018 后,软件无法正常启动,或在打开后不久出现不稳定和崩溃。 原因: 有多种原因可能会导致这些错误: ▪ 3ds Max、Windows 更新和 ProSound.dlc 声音驱动程序之间发生冲突; ▪ Windows …

怎样用计算机算出别人的出生日期,【怀孕出生日期计算器_怀孕出生日期计算器专题】- 天鹅到家...

很多要想比较技术专业且精确地预测分析自身的排卵期的女性、要想怀孕或避开怀孕的女性,或是要想根据对排卵期的预测分析,根据排卵期時间的不一,对生理学病症做出一些预防的女性,能够运用女性排卵期计算器。女性排卵期计算器可以根…

c++中内敛函数_C/C++求职者必备 23 道面试题,一道试题一份信心

1、 Static有什么用途?(1)函数体内static变量的作用范围是该函数体,该变量的内存只被分配一次,因此它的值在下次调用时不变; (2)模块内的static全局变量同样只能在该模块内的函数访问和调用,不能被模块外的其他函数访问…

不安装oracle客户端如何用plsql连接oracle

https://jingyan.baidu.com/article/d2b1d1029f2bbb5c7e37d4f4.html转载于:https://www.cnblogs.com/feifeicui/p/8949725.html

计算机专业研究生面试英语翻译,20考研复试英语面试最强攻略,都是干货!

原标题:20考研复试英语&面试最强攻略,都是干货!考研初试千辛万苦通过,成功就在眼前,可是偏偏中间还有复试英语这个拦路虎,复试中的英语环节每年让不少同学都很紧张,要想对答如流&#xff0c…

克隆虚拟机启动网卡提示错误 Device eth0 does not seem to be present, delaying initialization...

错误原因: 克隆的Linux系统在新的机器上运行,新服务器网卡物理地址已经改变。而/etc/udev/rules.d/70-persistent-net.rules这个文件确定了网卡和MAC地址的信息之间的绑定,克隆后的网卡的MAC已经发生了变化,所以导致系统认为网络设…

启动图一键生成工具_一键即运行!清华团队推出图深度学习工具包CogDL v0.1

一行代码命令可以做什么?“一行命令可以实现‘一条龙’运行实验。”访问 http://github.com/THUDM/cogdl 一键体验!近年来,结构化数据的表示学习备受业界关注与热捧,图神经网络成为处理相关工作的有力工具,基于随机游走…

[转]GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名

1。gcc包含的c/c编译器gcc,cc,c,g,gcc和cc是一样的,c和g是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c程序就用g编译2。gcc的基本用法gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个…

用计算机算判定系数,使用系数

使用系数是设备的使用时间与允许使用时间的比值。通常以一年累积的时间为计算范围。使用系数x年使用小时基数年使用小时数。例如,一台电机每天工作八小时,一年50周,那么一年电机工作的时候是2000小时。如果电机是连续工作制,一年有…

python2 openpyxl 复制excel内容到新的excel文件中 告警问题

该方法。由上海悠悠提供。可关注上海-悠悠的博客园def CopyExcel(Excelpath1,Excelpath2):#新建excelwb2openpyxl.Workbook()wb2.save(Excelpath2)print(新建成功)#读取数据wb1 openpyxl.load_workbook(Excelpath1)wb2 openpyxl.load_workbook(Excelpath2)sheets1 wb1.get_s…

工业机器人 扬州 江都_扬州市14家企业获批2019年江苏省示范智能车间

近日,我省正式发布2019年江苏省示范智能车间名单,所谓智能车间,是指将机器人、智能设备、信息技术三者在制造过程中全流程融合,实现自动决策、精确执行命令、精益管理。2019年,扬州市潍柴扬柴、新联汽车、江淮汽车等14…

超级强大的心理定律~~!你可以变成你想要的样子!~

这是转载的一篇文章。1、当你对某件事情抱着百分之一万的相信,它最后就会变成事实。 2、期望定律 期望定律告诉我们,当我们怀着对某件事情非常强烈期望的时候,我们所期望的事物就会出现。 3、情绪定律 情绪定律告诉我们,人百分之百…

学材分析计算机一体化,计算机一体化教学的体会

计算机一体化教学的体会摘要目前计算机教学没有摆脱传统的课程教学模式,虽然在教学中存在实训教学的环节,但仍偏重于理论化知识的完整灌输,导致理论与实践没有融为一体。一体化教学模式打破了传统的理论与实践教学的界限,是解决专…

pcb设计单点接地示意图_答案:关于PCB 的EMC设计知识考卷

(评分标准:本试卷作为培训效果评价依据,试卷满分为100分) ____________________________________________________________________________________________________________ 一、 判断题(每题2分) 1.塑料外壳产品的EMC性能只取决于PCB设计,与电缆的位置和PCB之间的…

Http、TCP/IP协议与Socket之间的区别

https://blog.csdn.net/done58/article/details/50996680转载于:https://www.cnblogs.com/654321cc/p/8968479.html

蚂蚁上树

蚂蚁上树原料:猪瘦肉100克、粉丝100克调料:酱油15克,盐1克,料酒10克,味精1克,葱、姜各5克,湿淀粉25克。制法:(1)将猪肉切成绿豆大小的粒。粉丝用热水泡好。葱、姜切末。(2)炒锅中放油…

深大计算机科学与技术在广东省,广东考生请注意:深圳大学2021年计划本省总招生人数比例超过75%!...

深圳大学,简称“深大”由于位于我国改革开放的经济前沿发展阵地——广东省深圳市,自1983年建校以来,学校发展迅猛,根据去年的招生录取分数来看,仅低于广东四所211高校(中山大学、华南理工大学、暨南大学、华南师范大学…

协方差公式性质证明过程_论文推荐 | 刘志平:等价条件平差模型的方差-协方差分量最小二乘估计方法...

《测绘学报》构建与学术的桥梁 拉近与权威的距离等价条件平差模型的方差-协方差分量最小二乘估计方法刘志平1, 朱丹彤1, 余航1, 张克非1,21. 中国矿业大学环境与测绘学院, 江苏 徐州 221116; 2. 皇家墨尔本理工大学空间科学研究中心, 澳大利亚 维多利亚州 墨尔本 3001收稿日期&…

图片在线转换base64

DEMO预览 图片在线转换base64 图片在线转换base64—-实现方法 采用 FileReader 对象的 readAsDataURL 方法进行图片的转换! JS实现 获取上传按钮,文字按钮,显示base64的结果,预览按钮,预览图片显示;判断当前…