我有一個這樣的字串:
package main
import "fmt"
func main() {
some := "p1k4"
for i, j := range some {
fmt.Println()
}
}
我想取字串中的每兩個連續字符并列印它們。輸出應該像p1, 1k, k4, 4p.
我已經試過了,但仍然無法找到答案,我應該如何在 go 中撰寫代碼并獲得我想要的輸出?
uj5u.com熱心網友回復:
Go 將字串作為 UTF-8 編碼的位元組序列存盤在記憶體中。這以位元組為單位一對一地映射 ASCII 字符,但該范圍之外的字符映射到多個位元組。
所以我建議for range在字串上使用回圈,該回圈覆寫字串的符文(字符),正確解碼多位元組符文。這樣做的優點是,它不需要配置(不同于轉換string至[]rune)。您還可以使用 列印對fmt.Printf("%c%c", char1, char2),這也不需要分配(與將runes轉換回string并連接它們不同)。
要了解有關 Go 中字串、字符和符文的更多資訊,請閱讀博客文章:Go 中的字串、位元組、符文和字符
由于回圈只回傳迭代中的“當前”符文(而不是前一個或下一個符文),因此使用另一個變數來存盤前一個(和第一個)符文,以便您在列印時可以訪問它們。
讓我們撰寫一個函式,根據需要列印對:
func printPairs(s string) {
var first, prev rune
for i, r := range s {
if i == 0 {
first, prev = r, r
continue
}
fmt.Printf("%c%c, ", prev, r)
prev = r
}
// Print last pair: prev is the last rune
fmt.Printf("%c%c\n", prev, first)
}
使用您的輸入和另一個具有多位元組符文的字串對其進行測驗:
printPairs("p1k4")
printPairs("Go-世界")
輸出將是(在Go Playground上嘗試):
p1, 1k, k4, 4p
Go, o-, -世, 世界, 界G
uj5u.com熱心網友回復:
package main
import (
"fmt"
)
func main() {
str := "12345"
for i := 0; i < len(str); i {
fmt.Println(string(str[i]) string(str[(i 1)%len(str)]))
}
}
uj5u.com熱心網友回復:
這是一個簡單的 for 回圈,將第一個字符附加在后面:
package main
import "fmt"
func main() {
some := "p1k4"
ns := some string(some[0])
for i := 0; i < len(ns)-1; i {
fmt.Println(ns[i:i 2])
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/403633.html
標籤:
