String 字串 數目統計

2021-07-27 19:30:00 字數 1541 閱讀 4425

function strlen( str )

if str == nil then

return 0

endreturn string.len(string.gsub(str,"[\128-\255][\128-\255][\128-\255]"," "))

endlocal str = "abc我1234"

local len = strlen(str)

print(len) -- 8

原理:string.gsub()把三個位元組的中文替換成三個空格 再取長度

替換用到正規表示式:

參考:utf-8編碼下 乙個中文為何是三個位元組呢?

參考:unicode是萬能編碼,包含了所有符號的編碼,它規定了所有符號在計算機底層的二進位制的表示順序。有關unicode為什麼會出現就不敘述了,unicode是針對所有計算機的使用者定義一套統一的編碼規範,這樣計算機使用者就避免了編碼轉換的問題。unicode定義了所有符號的二進位制形式,也就是符號如何在計算機內部儲存的,而且每個符號規定都必須使用兩個位元組來表示,也就是用16位二進位制去代表乙個符號,這樣就導致了乙個問題,英文編碼的空間浪費,因為在ansi中的符號都是乙個位元組來表示的,而使用了unicode編碼就白白浪費了乙個位元組。也就代表著unicode需要使用兩倍的空間去儲存相應的ansi編碼下的符號。雖然現在硬碟或者記憶體都很廉價,但是在網路傳輸中,這個問題就凸顯出來了,你可以這樣想想,本來1m的頻寬在ansi下可以代表1024*1024個字元,但是在unicode下卻只能代表1024*1024/2個字元。也就是1mb/s的頻寬只能等價於512kb/s,這個很可怕啊。所以為了解決符號在網路中傳輸的浪費問題,就出現了utf-8編碼,unicode transfer format -8 ,後面的8代表是以8位二進位制為單位來傳輸符號的,但是這樣又導致了乙個問題,雖然utf-8可以使用乙個位元組來表示ansi下的符號,但是對於其它類似漢語的符號,得需要兩個位元組來表示,所以計算機不知道如何去擷取乙個符號,也就是乙個符號對應的二進位制的擷取開始位置和擷取結束位置。所以為了解決unicode下的ansi符號的空間浪費和網路傳輸下如何擷取字元的問題,utf規定:如果乙個符號只佔乙個位元組,那麼這個8位位元組的第一位就為0。如果為兩個位元組,那麼規定第乙個位元組的前兩位都為1,然後第乙個位元組的第三位為0,第二個位元組的前兩位為10,然後如果是三個位元組的話,那麼第乙個位元組的前三位為111,第四位為0,剩餘的兩個位元組的前兩位都為10。按照這樣的演算法去思考乙個中文字元的utf-8是怎麼表示的:乙個中文字元需要兩個位元組來表示,兩個位元組一共是16位,那麼utf-8下,兩個位元組是不夠的,因為兩個位元組下,第乙個位元組已經佔據了三位:110,然後剩餘的乙個位元組佔據了兩位:10,現在就只剩下8位,與unicode下的兩個位元組,18位去表示任意乙個字元是相悖的,也就是unicode下的18位減去utf-8下的8位=8位,剛好差了乙個位元組的空間,所以就使用三個位元組去表示非ansi字元:三個位元組下,一共是24位,第乙個位元組頭四位是:1110,後兩個位元組的前兩位都是:10,那麼24位-8位=16位,剛好兩個位元組去表示unicode下的任意乙個非ansi字元。這也就是為什麼utf-8需要使用三個位元組去表示乙個非ansi字元的原因了!

多個位元組提供的位數超過了所需要的,多餘的位以0補全到編碼前面

NBUOJ 1969 統計元字串數目 字串處理

23世紀的一天,甬江邊出現了白鷺外的一種新品種,雄鳥非常愛惜雌鳥,所以它們採用一種集體一字型飛行方式,用a代表雌鳥,b代表雄鳥,他們總是排成a,aba,ababa,abababa,abababababa 的形式,這些一起飛的鳥稱為乙個飛行單元,但在某一天,你看到了天上上百萬隻鳥一字型飛過,那麼請你數...

統計字串相同且連續字元的數目

昨天同事給我看了一道面試題目,說的是給任意乙個字串,比如 aaaabbccazzggggg 然後寫乙個函式,最後將字串輸出為a4b2c2a1z2g5。起初自己想偏了,想用遞迴來做,想的相對比較複雜。遞迴應該是可以的,有時間再好好研究一下 後來重新整理一下思路,很快就寫出來了。php 如下 funct...

題解 統計字串中單詞數目

題目 輸入一行字元,統計其中有多少個單詞,每兩個單詞之間以空格隔開。如輸入 this is a c program.輸出 there are 5 words in the line.本講結構 二 相關習題 四 其他寫法的 正文 針對乙個剛讀入的符號如何判斷?二 相關習題 2.輸入一行字元,統計其中有...