日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串不替代_TI-Nspire 系列的字符串操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文遵循 CC BY-NC-SA 協(xié)議。

一 前言

在編程中,對(duì)字符串進(jìn)行操作是很常見的。但是TI-Nsipre 對(duì)字符進(jìn)行操作的函數(shù)有限,缺少一些如在字符串中插入字符、刪除字符等常用功能,給編程帶來不便。筆者經(jīng)過研究,實(shí)現(xiàn)了在字符串中插入字符、刪除字符、拆分字符的方法,并將它們編寫成了相應(yīng)的函數(shù),可以在編程中直接調(diào)用,提高了字符串處理編程的效率。

二 總覽

TI-Nspire 系列中,字符串是操作系統(tǒng)自帶數(shù)據(jù)類型之一。通過 GetType() 函數(shù)[1],我們可以求證這一點(diǎn)。

TI-BASIC 用 STR 表示字符串類型的變量

對(duì)于該數(shù)據(jù)類型,TI-BASIC 提供了多種操作函數(shù),但并不完善 / 不符合直覺。本文旨在簡(jiǎn)述這些函數(shù)的應(yīng)用,并實(shí)現(xiàn)一些常用功能。

接下來筆者將介紹它的一些奇怪之處,讀者一定要注意。

1. 字符串和字符的關(guān)系

一般的編程語言中,字符串是字符數(shù)組的語法糖[2]。但在 TI-BASIC 中,并沒有所謂“字符”的概念。如果想要表示“字符”,TI-BASIC 使用的是長(zhǎng)度為 1 的字符串。

2. 隨機(jī)訪問

由于 TI-BASIC 沒有“字符”的概念,字符串也不是字符數(shù)組,自然不能使用下標(biāo)隨機(jī)訪問字符。如果有隨機(jī)訪問的需求,需要使用函數(shù)替代。該操作在后文將會(huì)提到。

3. 與列表的關(guān)系

雖然 TI-BASIC 的字符串不是列表,但以下列出的許多函數(shù)都同時(shí)適用于列表和字符串。但很關(guān)鍵的一點(diǎn)是,countIf() 不支持字符串而僅支持列表。后文將給出筆者對(duì) countIfStr() 的實(shí)現(xiàn)。

三 常用系統(tǒng)函數(shù)匯總

TI-BASIC 為字符串提供了多種函數(shù)和運(yùn)算符。這些函數(shù)和運(yùn)算符的說明在官方 reference 文檔中分布過于散亂,在此處給出匯總。

1. dim(str) -> len

返回字符串 str 的長(zhǎng)度 len。

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

倒著dim(大霧,劃掉)

返回字符串 str 從第 beg 位開始的長(zhǎng)度為 len 的子字符串。

可以用于隨機(jī)訪問字符串中的某一個(gè)字符。

3. left(str, pos) -> substr

返回字符串 str 從左至右第 pos 個(gè)字符及以前的所有字符組成的子字符串。

4. right(str, pos) -> substr

返回字符串 str 從右至左第 pos 個(gè)字符及以后的所有字符組成的子字符串。

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

在字符串 str 中查找子字符串 sub,可選指定查找起始點(diǎn) beg。

返回 sub 在 str 中第一次出現(xiàn)的首位字符位置。

如果未找到,則返回 0。

6. expr(str) -> result

將字符串 str 當(dāng)作表達(dá)式進(jìn)行求值,返回計(jì)算結(jié)果。

CAS 機(jī)型能夠計(jì)算含未知參數(shù)的表達(dá)式,而非 CAS 機(jī)型遇到未知參數(shù)將會(huì)報(bào)錯(cuò)。

值得注意的是,str 中如果存在 TI-BASIC 語句,也將會(huì)被正確執(zhí)行。

在 TI-BASIC 的傳統(tǒng)中,冒號(hào) (':') 會(huì)被作為換行的替代符號(hào)[3]。因此,即便TI-BASIC不支持轉(zhuǎn)義字符,使用 expr 函數(shù)執(zhí)行儲(chǔ)存在字符串中的多行代碼也是完全可行的。

結(jié)合其他字符串操作函數(shù),該函數(shù)為今后實(shí)現(xiàn)類并進(jìn)行面向?qū)ο缶幊?#xff0c;甚至函數(shù)式編程,打下了堅(jiān)實(shí)的基礎(chǔ)。

ps:親愛的讀者們,如果有人問你們,TI-BASIC 里邊除了三角函數(shù)之外還有哪一對(duì)函數(shù)是在一個(gè)可用的函數(shù)后添加一個(gè)字符依然是可用函數(shù)名的,你們可以回答“exp() 和 expr()”。

7. string(expr) -> str

將表達(dá)式 expr 求值后的結(jié)果轉(zhuǎn)換為字符串 str 并返回。

在計(jì)算過程中,CAS 機(jī)型會(huì)將未知參數(shù)名直接轉(zhuǎn)換為字符串,非 CAS 機(jī)型會(huì)報(bào)錯(cuò)。

如果嘗試將一個(gè)字符串轉(zhuǎn)換為一個(gè)字符串,則它會(huì)被加上一對(duì)英文引號(hào)。

8. format(val, fmt) -> str

該圖片中的示例數(shù)據(jù)來源于官方參考文檔

將值 val 以格式控制字符串 fmt 指定的格式轉(zhuǎn)化為字符串 str。

fmt 的可選格式引用自官方文檔:

fmt 必須是如下形式的字符 串:“F[n]”、“S[n]”、“E[n]”、“G[n][c]”,其 中 [ ] 表示可選的部分。
F[n]:Fixed 格式。n 為小數(shù)點(diǎn)后顯示的位數(shù)。
S[n]:Scientific 格式。n 為小數(shù)點(diǎn)后顯示的位數(shù)。
E[n]:Engineering 格式。n 為第一個(gè)有效數(shù)字后的位數(shù)。指數(shù)將調(diào)整為三的倍數(shù),并且小數(shù)點(diǎn)向右移零位、一位或兩位。
G[n][c]:與固定格式相同,但也將小數(shù)點(diǎn)左邊的數(shù)位每三個(gè)分為一組。如果 c 為句號(hào),則小數(shù)點(diǎn)將顯示為逗號(hào)。
[Rc]:上述指定符可以加上一個(gè)以 Rc 小數(shù)點(diǎn)標(biāo)記的后綴,其中 c 是單個(gè)字符, 指明替代小數(shù)點(diǎn)的符號(hào)。

9. str1 & str2 (字符串聯(lián)結(jié)運(yùn)算符)

該運(yùn)算符用于將兩個(gè)字符串連接起來。可以連續(xù)使用。

10. #(str) (間接運(yùn)算符)

該運(yùn)算符用于將字符串 str 轉(zhuǎn)換為變量或函數(shù)名,以創(chuàng)建 / 修改 / 調(diào)用變量或函數(shù)。

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

這兩個(gè)函數(shù)是一對(duì)。

char() 用于將整數(shù)參數(shù) int 轉(zhuǎn)換為其在 TI-Nspire 字符集中對(duì)應(yīng)的字符組成的單字符字符串 str,而 ord(str) 將傳入的字符串 str 的首位字符轉(zhuǎn)化為其在 TI-Nspire 字符集中的序號(hào) int。

12. 附注

TI-BASIC 還提供了一些令人不明用途的函數(shù)。

例如 rotate() 被用于字符串的用法,過于詭異以至于令人無法理解如何運(yùn)用于實(shí)際,在此暫且不作說明。如果有興趣,可以在 ReferenceGuide 中查找 rotate() 和 shift() 這兩個(gè)函數(shù)。

四 常用功能實(shí)現(xiàn)

結(jié)合以上所有函數(shù)及常規(guī)編程知識(shí),可以實(shí)現(xiàn)一些令字符串操作更加便捷的實(shí)用函數(shù)。

1. 在一個(gè)字符串 str 中的指定位置 pos 處插入一個(gè)子串 tgt

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

2. 在一個(gè)字符串 str 中從指定位置 pos 開始,移除之后的 len 個(gè)字符

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. 移除目標(biāo)字符串 str 中的所有目標(biāo)子字符串 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

諸如此類的常用函數(shù)還能夠?qū)崿F(xiàn)很多。

五 結(jié)語

在 TI-BASIC 領(lǐng)域,字符串的應(yīng)用空間極為廣闊,而本文的這些總結(jié)和實(shí)現(xiàn)只是微不足道的一部分。

21 世紀(jì)是字符串的世紀(jì)(大霧),我們應(yīng)當(dāng)在字符串上投入足夠的研究與思考,取得更好的成績(jī)。

六 附件

stdstr.tns3.6K · 百度網(wǎng)盤

這是包含了本文中所有代碼實(shí)現(xiàn)的庫。函數(shù)均以 LibPub 方式聲明,可以直接將該文件拷貝到計(jì)算器的 MyLib 目錄下進(jìn)行體驗(yàn)。

參考

  • ^TI-BASIC 用于獲取變量類型的函數(shù)
  • ^比如 C 語言
  • ^這個(gè)傳統(tǒng)似乎是從 Z80 系列開始的
  • 總結(jié)

    以上是生活随笔為你收集整理的字符串不替代_TI-Nspire 系列的字符串操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。