c++string替换指定位置字符_Lua 字符串
生活随笔
收集整理的這篇文章主要介紹了
c++string替换指定位置字符_Lua 字符串
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
--[[ Lua 字符串 字符串或串(String)是由數(shù)字、字母、下劃線組成的一串字符 Lua語(yǔ)言中字符串可以使用以下三種方式來(lái)表示 ]] -- 單引號(hào)的一串字符 -- 雙引號(hào)的一串字符 -- [[ 與 ]] 之間的一串字符string1 = "Lua"print("string1=",string1)string2 = 'hello'print("string2=",string2)string3 = [["Hello World"]]print("string3=",string3)-- string1= Lua-- string2= hello-- string3= "Hello World"--[[ 轉(zhuǎn)義字符用于表示不能直接顯示的字符,比如后退鍵,回車鍵,等。 在字符串轉(zhuǎn)換雙引號(hào)可以使用 \" 下面是所有轉(zhuǎn)義字符和所對(duì)應(yīng)的意義 轉(zhuǎn)義字符 意義 ASCII碼值(十進(jìn)制) \a 響鈴(BEL) 007 \b 退格(BS),將當(dāng)前位置移到前一列 008 \f 換頁(yè)(FF),將當(dāng)前位置移到下一頁(yè)開(kāi)頭 012 \n 換行(LF),將當(dāng)前位置移到下一行開(kāi)頭 010 \r 回車(CR),將當(dāng)前位置移到本行開(kāi)頭 013 \t 水平制表(HT),(跳到下一個(gè)TAB位置) 009 \v 垂直制表(VT) 011 \\ 代表一個(gè)反斜杠字符 \ 092 \' 代表一個(gè)單引號(hào)(撇號(hào))字符 039 \" 代表一個(gè)雙引號(hào)字符 034 \0 空字符(NULL) 000 \ddd 1到3位八進(jìn)制數(shù)所代表的任意字符 三位八進(jìn)制 \xhh 1到2位十六進(jìn)制所代表的任意字符 二位十六進(jìn)制]]print("\n\n")-- ***************************************************************************--[[ 字符串操作 Lua提供了很多的方法來(lái)支持字符串的操作]]-- string.upper(argument)-- 字符串全部轉(zhuǎn)換為大寫(xiě)字母print(string.upper("hello")) -- HELLO-- string.lower(argument)-- 字符串全都轉(zhuǎn)換為小寫(xiě)字母print(string.lower("HellO")) -- hello-- string.gsub(mainString,findString,replaceString,num)-- 在字符串中替換-- mainString為要操作的字符串,findString為被替換的字符串-- replaceString要替換的字符,num替換次數(shù)(可以忽略,則全部替換)print(string.gsub("HelloWorld","l","#",2)) -- He##oWorld 2-- string.find(str,substr,[init, [end]])-- 在一個(gè)指定的目標(biāo)字符串中搜索指定的內(nèi)容(第三個(gè)參數(shù)為索引),返回其具體的位置,不存在則返回nilprint(string.find("Hello Lua, Hello World Lua","Lua",2)) -- 7 9print(string.find("Hello Lua, Hello World Lua","Lua",10)) -- 24 26-- string.reverse(arg)-- 字符串反轉(zhuǎn)print(string.reverse("HelloWorld")) -- dlroWolleH-- ***************************************************************************-- string.format(...)-- 返回一個(gè)類似printf的格式化字符串local st = string.format("the value is:%d",520)print(st) -- the value is:520-- 字符串格式化 詳細(xì)介紹--[[ Lua提供了string.format()函數(shù)來(lái)生成具有特定格式的字符串,函數(shù)的第一個(gè)參數(shù)時(shí)格式, 之后是對(duì)應(yīng)格式中每個(gè)代號(hào)的各種數(shù)據(jù)。由于格式字符串的存在,使得產(chǎn)生的長(zhǎng)字符串可讀性大大提高了。 格式字符串 轉(zhuǎn)義碼 %c 接受一個(gè)數(shù)字,并將其轉(zhuǎn)換為ASCII碼表中對(duì)應(yīng)的字符 %d 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為有符號(hào)的整數(shù)格式 %o 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為八進(jìn)制數(shù)格式 %u 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為無(wú)符號(hào)整數(shù)格式 %x 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為十六進(jìn)制數(shù)格式,使用小寫(xiě)字母 %X 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為十六進(jìn)制數(shù)格式,使用大寫(xiě)字母 %e 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為科學(xué)計(jì)數(shù)法格式,使用小寫(xiě)字母e %E 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為科學(xué)計(jì)數(shù)法格式,使用大寫(xiě)字母E %f 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為浮點(diǎn)數(shù)格式 %g(%G) 接受一個(gè)數(shù)字并將其轉(zhuǎn)化為%e(%E,對(duì)應(yīng)%G)及%f中較短的一種格式 %q 接受一個(gè)字符串并將其轉(zhuǎn)化為可安全被Lua編譯器讀入的格式 %s 接受一個(gè)字符串并按照給定的參數(shù)格式化該字符串 為進(jìn)一步細(xì)化格式,可以在%后添加參數(shù),參數(shù)將以如下順序讀入: (1)符號(hào):一個(gè)+符號(hào)表示其后的數(shù)字轉(zhuǎn)義符將讓正數(shù)顯示正好,默認(rèn)情況下只有負(fù)數(shù)顯示符號(hào) (2)占位符:一個(gè)0,在后面制定了字符串寬度時(shí)占位用,不填時(shí)默認(rèn)占位符是空格 (3)對(duì)齊標(biāo)識(shí):在指定了字符串寬度時(shí),默認(rèn)為右對(duì)齊,增加-好可以改變?yōu)樽髮?duì)齊 (4)寬度數(shù)值 (5)小數(shù)位數(shù)/字符串裁切:在寬度數(shù)值后增加的小數(shù)部分n,若后接f(浮點(diǎn)數(shù)轉(zhuǎn)義符,如%6.3f)則 設(shè)定該浮點(diǎn)數(shù)的小數(shù)只保留n位,若后接s(字符串轉(zhuǎn)義符,如%5.3s)則設(shè)定該字符串值顯示前n位]]do local string1 = "Lua" local string2 = "HelloWorld" local number1 =10 local number2 = 20 print(string.format("%s %s",string1,string2)) -- Lua HelloWorld local day = 1 local month =1 local year = 2020 print(string.format("%03d/%02d/%02d",year,month,day)) -- 2020/01/01 print(string.format("%.4f",1/3)) -- 0.3333 print(string.format("%5.3s",string2)) -- Hel 注意,這前面有兩個(gè)空格 print(string.format("%1.3s",string2)) --Helendprint("\n")doprint(string.format("%c", 83)) -- Sprint(string.format("%+d", 17.0)) -- +17print(string.format("%05d", 17)) -- 00017print(string.format("%o", 17)) -- 21print(string.format("%u", 3)) -- 3print(string.format("%x", 13)) -- dprint(string.format("%X", 13)) -- Dprint(string.format("%e", 1000)) -- 1.000000e+03print(string.format("%E", 1000)) -- 1.000000E+03print(string.format("%6.3f", 13)) -- 13.000print(string.format("%q", "One\nTwo") ) -- "One\ -- Two"print(string.format("%s", "monkey")) -- monkeyprint(string.format("%10s", "monkey")) -- monkeyprint(string.format("%5.3s", "monkey")) -- monendprint("\n\n")-- ***************************************************************************-- string.char(arg) 和 string.byte(arg[, int])-- char將整型數(shù)字轉(zhuǎn)成字符并連接,byte轉(zhuǎn)換字符為整數(shù)值(可以指定某個(gè)字符,默認(rèn)第一個(gè)字符)-- 字符與整數(shù)相互轉(zhuǎn)換local ss = string.char(65,66,67,68)print(ss) -- ABCDlocal num = string.byte("ABCD",2)local num2 = string.byte("ABCD")local num3 = string.byte("ABCD",4)print("num=",num,"num2=",num2,"num3=",num3) -- num= 66 num2= 65 num3= 68-- 轉(zhuǎn)換第一個(gè)字符print(string.byte("HelloLua")) -- 72-- 轉(zhuǎn)換第三個(gè)字符print(string.byte("HelloLua",3)) -- 108-- 轉(zhuǎn)換末尾第一個(gè)字符 print(string.byte("HelloLua",-1)) -- 97-- 轉(zhuǎn)換第二個(gè)字符 print(string.byte("HelloLua",2)) -- 101-- 轉(zhuǎn)換末尾第二個(gè)字符print(string.byte("HelloLua",-2)) -- 117-- 整數(shù)ASCII碼轉(zhuǎn)換為字符print(string.char(97)) -- a-- ***************************************************************************-- string.len(arg)-- 計(jì)算字符串的長(zhǎng)度local str = "Hello"local strlen = string.len(str)print("str=",str,"len=",strlen) -- str= Hello len= 5-- string.rep(string,n)-- 返回字符串string的n個(gè)拷貝local tmpstr = string.rep("abcd",2)print(tmpstr) -- abcdabcdtmpstr = string.rep("HelloWorld ",10)print(tmpstr)-- HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld -- ***************************************************************************-- .. -- 連接兩個(gè)字符串local he = "hello "local wo = "world"local hewo = he .. woprint(string.format("he=%s wo=%s hewo=%s",he,wo,hewo))-- he=hello wo=world hewo=hello worldprint("\n")-- ***************************************************************************-- string.gmatch(str,pattern)-- 返回一個(gè)迭代器函數(shù),每一次調(diào)用這個(gè)函數(shù),返回一個(gè)在字符串str找到的下一個(gè)符合pattern描述的字串。-- 如果參數(shù)pattern描述的字符串沒(méi)有找到,迭代器函數(shù)返回nilfor world in string.gmatch("Hello Lua Hello World","%a+") do print(world)-- Hello-- Lua-- Hello-- Worldendprint("\n\n")-- ***************************************************************************-- string.match(str,pattern,init)-- string.match()只尋找源字符串str中的第一個(gè)配對(duì),參數(shù)init可選,指定搜尋過(guò)程的起點(diǎn),默認(rèn)為1-- 在成功配對(duì)時(shí),函數(shù)將返回配對(duì)表達(dá)式中的所有捕獲結(jié)果,如果沒(méi)有設(shè)置捕獲標(biāo)記,則返回整個(gè)配對(duì)字符串,當(dāng)沒(méi)有成功配對(duì)時(shí),返回nillocal match_string = string.match("Sorry! I have 2 questions for you.","%d+ %a+")print(match_string) -- 2 questionsprint("\n")print(string.format("%d %q", string.match("I have 2 questions for you.", "(%d+) (%a+)")))-- 2 "questions"print("\n\n")-- ***************************************************************************--[[ 字符串截取 字符串截取使用sub()方法 string.sub()用于截取字符串 string.sub(s, i [, j]) 參數(shù)說(shuō)明: s:要截取的字符串 i:截取開(kāi)始位置 j:截取結(jié)束位置,默認(rèn)為-1,最后一個(gè)字符 來(lái),看看實(shí)例]]do local sourcestr = "prefix--brookzhyy--suffix" print("原始字符串:",string.format("%q",sourcestr)) -- 原始字符串: "prefix--brookzhyy--suffix" -- 截取部分,從第4個(gè)到第10個(gè) local f_sub = string.sub(sourcestr,4,10) print("截取4-10個(gè)字符:",string.format("%q",f_sub)) -- 截取1-10個(gè)字符: "fix--br" -- 截取部分,從第1個(gè)到第8個(gè) local s_sub = string.sub(sourcestr,1,8) print("截取第1-8個(gè)字符:",string.format("%q",s_sub)) -- 截取第1-8個(gè)字符: "prefix--" -- 記得取最后10個(gè) local t_sub = string.sub(sourcestr,-10) print("截取最后10個(gè)字符:",string.format("%q",t_sub)) -- 截取最后10個(gè)字符: "yy--suffix" -- 索引越界,輸出原始字符串 local f_sub = string.sub(sourcestr,-100) print("截取 索引越界,返回原是字符:",string.format("%q",f_sub)) -- 截取 索引越界,返回原是字符: "prefix--brookzhyy--suffix"endprint("\n\n")-- ***************************************************************************-- ***************************************************************************-- 匹配模式--[[ 匹配模式直接用常規(guī)的字符串來(lái)描述。用于模式匹配的函數(shù): string.find string.gmatch string.gsub string.match 在模式串中使用字符類 字符類指可以匹配一個(gè)特定字符集合內(nèi)任何字符的模式項(xiàng)。比如:字符類 %d 匹配任何數(shù)字, 所以可以使用模式串 %d%d%d%d/%d%d/%d%d 搜索 yyyy/mm/dd格式的日期 不多說(shuō),直接上例子]]do local str = "Deadline is 2020/08/25. And that day is Chinese Valentine's Day." local date = "%d%d%d%d/%d%d/%d%d" print(string.sub(str,string.find(str,date))) -- 2020/08/25end--[[ Lua支持的所有字符類 單個(gè)字符(除了 ^$()%.[]*+-?外):與該字符自身配對(duì) .(點(diǎn)) 與任何字符配對(duì) %a 與任意字母配對(duì) %c 與任何控制符配對(duì)(\n等) %d 與任意數(shù)字配對(duì) %l 與任意小謝字母配對(duì) %p 與任意標(biāo)點(diǎn)(punctuation)配對(duì) %s 與空白字符配對(duì) %u 與任意大寫(xiě)字母配對(duì) %w 與任意字母/數(shù)字配對(duì) %x 與任意十六進(jìn)制數(shù)配對(duì) %z 與任意代表0的字符配對(duì) %x(此處x是非字母非數(shù)字字符):與字符x配對(duì),主要用來(lái)處理表達(dá)式中有功能多字符(^$()%.[]*+-?)的配對(duì)問(wèn)題 例如:%% 與 % 配對(duì) [數(shù)個(gè)字符類]:與任何[]中包含的字符類配對(duì),例如:[%w_]與任何字母/數(shù)字,或下劃線符號(hào)_配對(duì) [^數(shù)個(gè)字符類]:與任何不包含在[]中的字符類配對(duì),例如:[^%s]與任何非空白字符配對(duì) 當(dāng)上述的字符類用大些書(shū)寫(xiě)時(shí),表示與非此字符的任何字符配對(duì),如,%S表示與任何非空白字符配對(duì),例如 %A 與非字母的字符配對(duì)]]print(string.gsub("hello, up-down!", "%A","."))-- hello..up.down. 4-- 解釋下: %A 配對(duì)任何非字母字符,因此,配對(duì)到了 , -! 四個(gè),然后把它們替換為.-- 數(shù)字4不是字符串的一部分,它是gsub返回的第二個(gè)結(jié)果,代表發(fā)生替換的次數(shù)-- 在模式匹配中有一些特殊字符,它們有特殊的意義,Lua中的特殊字符如下-- ( ) . % + - * ? [ ^ $-- % 用作特舒符號(hào)的轉(zhuǎn)義字符,因此 %. 匹配點(diǎn). %% 匹配字符百分號(hào)% -- 轉(zhuǎn)義字符%不僅可以用來(lái)轉(zhuǎn)義特殊字符,還可以用于所有的非字母的字符--[[ 模式條目可以是 單個(gè)字符類匹配該類別中的任意單個(gè)字符 單個(gè)字符類跟一個(gè)*,將匹配零個(gè)或多個(gè)該類的字符,這個(gè)條目總是匹配盡可能長(zhǎng)的串 單個(gè)字符類跟一個(gè)+,將匹配一個(gè)或多個(gè)該類的字符,這個(gè)條目總是匹配盡可能長(zhǎng)的串 單個(gè)字符類跟一個(gè)-,將匹配零個(gè)或多個(gè)該類的字符,和*不同,這個(gè)條目總是匹配盡可能短的串 單個(gè)字符類跟一個(gè)?,將匹配零個(gè)或一個(gè)該類的字符,只要有可能,他會(huì)匹配一個(gè) %n,這里的n可以從1到9,這個(gè)條目匹配一個(gè)等于n號(hào)捕獲物(后面有描述)的字串 %bxy,這里的x和y是兩個(gè)明確的字符:這個(gè)條目匹配以x開(kāi)始y結(jié)束,且其中x和y保持平衡的字符串, 意思是,如果從左到右讀這個(gè)字符串,對(duì)每次讀到一個(gè)x就+1,讀到一個(gè)y就-1,最終結(jié)束處的那個(gè)y是第一個(gè)讀到0的y。 舉個(gè)例子:條目%b()可以匹配到括號(hào)品哼到表達(dá)式 %f[set],指邊境模式,這個(gè)條目會(huì)匹配到一個(gè)位于set內(nèi)某個(gè)字符之前到一個(gè)空串,且這個(gè)位置和前一個(gè)字符不屬于set。 集合set到含義如前面所描述,匹配出的那個(gè)空串之開(kāi)始和結(jié)束點(diǎn)點(diǎn)計(jì)算就看成該處有個(gè)字符\0一樣。 模式: 模式,指一個(gè)模式條目序列。在模式最前面加上符號(hào)^將錨定從字符串的開(kāi)始處做匹配。 在模式最后面加上符號(hào)$將使匹配過(guò)程錨定到字符串的結(jié)尾。如果^和$同時(shí)出現(xiàn)在其他位置,它們均沒(méi)有特殊含義,只表示自身。 捕獲: 模式可以在內(nèi)部用小括號(hào)括起一個(gè)子模式:這些子模式被稱為 捕獲物。當(dāng)匹配成功時(shí),由 捕獲物匹配到的字符串的字串被保存起來(lái)用于未來(lái)的用途, 捕獲物以它們左括號(hào)的次序來(lái)編號(hào)。例如,對(duì)于模式 (a*(.)%w(%s*)) 字符串中匹配到 a*(.)%w(%s) 的部分保存在第一個(gè)捕獲物中(因此編號(hào)是1) 由 . 匹配到的字符是2好捕獲物,匹配到 %s* 的那部分是3號(hào) 作為一個(gè)特例,空的捕獲()將捕獲到當(dāng)前字符串的位置(它是一個(gè)數(shù)字)。 例如:如果將模式 ()aa() 作用到字符串 flaaap上,將產(chǎn)生兩個(gè)捕獲物:3和5]]
掃碼關(guān)注一下唄~
總結(jié)
以上是生活随笔為你收集整理的c++string替换指定位置字符_Lua 字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 社保统筹总额和个人总额是什么意思 社保卡
- 下一篇: qt 历史记录控件_[QT] 记录一些使