c++代碼轉為go_Go語言學習筆記六--string編碼


分解探索string編碼

轉為byte數組

func main() {s := "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 為什么是15呢?for _, v := range []byte(s) {fmt.Printf("%X ",v) //%X 轉為16進制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21//猜測從第三個開始(E5 B0 8F) -> 小 ,后面都是三個字節代表一個漢字//其實utf-8 是使用的可變長度來編碼的(世界上這么多語言,如果全部都是3個直接來編碼,太浪費空間)}
}

通過打印我們猜測,這個byte數組中,中文漢字是使用3個字節來編碼

直接遍歷string

驗證:上述猜想

func main() {for k, v := range s {   //v is a runefmt.Printf("(%d,%X)",k,v)//(0,48)(1,69)(2,5C0F)(5,667A)(8,52A0)(11,6CB9)(14,21)}
}

如圖for k, v := range sv是一個int32類型:

bb3bfbc744f3984a3652a5a840c1edfa.png

發現從第三個開始漢字,下標正確2,但是下一個就變成了5,這說明,上面轉為byte數組時我們的猜想是正確的, 一個漢字使用了3個byte來表示,但是這樣遍歷 根本不是我們想要的,因為下標的問題.

總結:既 直接遍歷字符串時,k 為 byte數組的下標 而 v 卻是int32類型(rune)

utf8工具類解碼

//使用 utf8工具類fmt.Println("s rune counts:",utf8.RuneCountInString(s))//s rune counts: 7 ,發現是s的長度是我們想要的了

既然可以得到正確的長度了,嘗試一個字一個字解碼

bytes := []byte(s)for len(bytes)>0 {ch, size := utf8.DecodeRune(bytes) //解碼byte數組 返回rune和size長度bytes = bytes[size:] //截取bytefmt.Printf("%c " ,ch)}
H i 小 智 加 油 !  //發現每個字符都被解碼出來了

結論

在go中,rune就相當于Java中的char,而rune是uft8編碼

正常遍歷一個string的方法

fmt.Println();for k, v := range []rune(s) { //直接將string轉為rune切片fmt.Printf("(%d %c)",k,v) //%c 可以將rune轉為 字符串}
(0 H)(1 i)(2 小)(3 智)(4 加)(5 油)(6 !) 得到了我們想要的答案.

TEST:查找到一個字符串中最長不重復字符串(國際版)

這里直接跳過了這個test的解題思路,如果沒有看過的同學, 點擊上篇查看

func findMaxNoRepeatString(s string) int {start := 0keysIndex := make(map[rune]int)lenth := 0for i, v := range []rune(s) { //將byte換成rune即可lastIndex, ok := keysIndex[v]if ok && lastIndex >= start {start = lastIndex + 1} else {lenth = i - start + 1}keysIndex[v] = i}return lenth
}

作者所有的學習源碼在 go學習源碼github地址,如果覺得有用的話幫小智貢獻一個star

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539303.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539303.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539303.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux機器件拷貝文件

常用命令有:sftp,scp sftp [rootzengmg develop_soft]# sftp 192.168.255.132Connecting to 192.168.255.132... The authenticity of host 192.168.255.132 (192.168.255.132) cant be established. RSA key fingerprint is bd:09:eb:22:2f:ed:95:57:ab…

steam游戲時長計算機,我加入steam五年了,盤點下我買過的22款正版單機游戲

我加入steam五年了,盤點下我買過的22款正版單機游戲2020-02-17 10:50:07104點贊72收藏37評論大家好吖,在2015年的時候朋友就推薦了我入坑steam,不過那個時候更多的知道這是個dota啟動器,慢慢的steam也越來越出名啦,中國…

AdPlayBanner:功能豐富、一鍵式使用的圖片輪播插件

概述 AdPlayBanner:功能豐富、一鍵式使用的圖片輪播插件詳細 代碼下載:http://www.demodashi.com/demo/11312.html AdPlayBanner是一個Android平臺基于ViewPager實現的輪播圖插件,主要用以自動或者手動地播放輪播圖,提供了Fresco、…

pycharm運行模型時怎么設置權重?_使用AMP和Tensor Cores得到更快速,更節省內存的PyTorch模型...

點擊上方“AI派”,關注公眾號,選擇加“星標“或“置頂”導讀只需要添加幾行代碼,就可以得到更快速,更省顯存的PyTorch模型。你知道嗎,在1986年Geoffrey Hinton就在Nature論文中給出了反向傳播算法?此外&…

引入靜態變量_Common Lisp變量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常簡單:只是用一個名字空間,所有表達式中相應位置的值應該是明確的。Common Lisp和Scheme最大的不同是,函數名字空間和數據的名字空間是分離的。操作函數名字空間的語句包括,defun&#xff…

JobTracker和TaskTracker

轉載:http://blog.csdn.net/keda8997110/article/details/8348705 ----------------------------------------------------------------------------------------- JobTracker和TaskTracker JobTracker 對應于 NameNode TaskTracker 對應于 DataNode DataNode 和Na…

c理c利用計算機怎么彈,通過匯編一個簡單的C程序,分析匯編代碼理解計算機是如何工作的...

通過匯編一個簡單的C程序,分析匯編代碼理解計算機是如何工作的計算機的工作方式:現代計算機的基本體系結構都是采用馮諾依曼結構,馮諾依曼的設計思想最重要之處是"存儲程序"的這個概念。計算機的工作過程,就是執行程序的…

Linux安裝MySQL的兩種方法

原文鏈接:http://blog.csdn.net/superchanon/article/details/8546254 --------------------------------------------------------------------------------------- 1. 運行平臺:CentOS 6.3 x86_64,基本等同于RHEL 6.3 2. 安裝…

jenkins 手動執行_想知道如何用Jenkins自動執行Python腳本輸出測試報告?

前言在用python做自動化測試時,我們寫好代碼,然后需要執行才能得到測試報告,這時我們可以通過 Jenkins 來進一步完成自動化工作。借助Jenkins,我們可以結合 Git/SVN 自動拉取代碼,可以設置定時構建,接著就可…

VR 影院,約嗎?

世界第一家 VR 影院已經開張,朋友,去不? 世界第一家 VR 影院正式開張 (無大屏的 VR 電影院) 在被稱為 VR 元年的 2016 年,越來越多的人加入了這個新興的領域,各種傳統應用也在被 VR 包裝之后以…

redis cluster 分布式鎖_關于分布式鎖原理的一些學習與思考redis分布式鎖,zookeeper分布式鎖...

首先分布式鎖和我們平常講到的鎖原理基本一樣,目的就是確保,在多個線程并發時,只有一個線程在同一刻操作這個業務或者說方法、變量。在一個進程中,也就是一個jvm 或者說應用中,我們很容易去處理控制,在jdk …

會計行業被計算機取代馬云,會計人:為什么我神煩“人工智能取代說”?

原標題:會計人:為什么我神煩“人工智能取代說”?原創來源:學會計有方法從財會機器人誕生到馬云的無人商店,全行業掀起了一股“人工智能取代說”的熱潮。有些財會朋友在一輪又一輪的信息轟炸下,倍感壓力&…

mysql5.6允許遠程服務器訪問數據庫

創建一個mysql用戶,并設置可以遠程訪問 grant usage on *.* to fredlocalhost identified by fred;//創建用戶fred密碼ferdselect host,user,password from mysql.user where userfred;//查看記錄 grant all privileges on *.* to fred%identified by fred;//設置可以遠程訪問…

sp烘焙流程_小手雷-PBR材質流程(一)——(基本材質)

小手雷-PBR材質流程(一)Substance Painter生存手冊經過了12個章節的講解后,已經完結了(。・ω・。)相信大家經過了生存手冊這一基礎教程過后,對Substance Painter這款軟件已經有了比較堅實的基礎了,…

MyBatis-進階2

typeHandler typeHandler有什么用? 你可以重寫類型處理器或創建你自己的類型處理器來處理不支持的或非標準的類型。 具體做法為:實現 org.apache.ibatis.type.TypeHandler 接口, 或繼承一個很便利的類 org.apache.ibatis.type.BaseTypeHandle…

python中 r是什么意思_python中rb含義理解

Python文件讀寫的幾種模式: r,rb,w,wb 那么在讀寫文件時,有無b標識的的主要區別在哪里呢? 文件使用方式標識 r:默認值,表示從文件讀取數據 w:表示要向文件寫入數據,并截斷以前的內容 a:表示要向文件寫入數據&#xff0…

哈佛大學計算機生物科學,生命科學專業

【出國留學網】昨日,泰晤士報公布了最新版2018年世界大學生命科學排名,哈佛大學位列第一。本文是關于世界各國大學在本次生命科學排名中的具體表現,供你選校參考。The 2018 Times Higher Education World University Rankings’ table for li…

怎樣呵護友誼_呵護真正的友情,助力漫長的人生

友情,即友誼,是指朋友和朋友之間的感情。它是一種很美妙的東西,可以讓你在失落的時候變得高興起來,可以讓你走出苦海,去迎接新的人生。它就像一種你無法說出又可以感到快樂無比的東西。只有擁有真正朋友的人&#xff0…

【Day41】Python之路——AJAX

什么是AJAX AJAX Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。 優點: 不重新加載整個頁面的情況下,可以與服務器交換數據并更新部分網頁內容 不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執行 同源…

LINUX重啟MYSQL的命令

原文:http://blog.csdn.net/liuyong0818/article/details/5693336 ------------------------原文有錯誤,本文轉載時已修改--------- 如何啟動/停止/重啟MySQL 一、啟動方式 1、使用 service 啟動:service mysql start 2、使用 mysql 腳…