69 yerine "E" çıkışı nasıl alınır?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang'ın bir karakteri bayta dönüştürme işlevi var mı ve bunun tersi de geçerli mi?
69 yerine "E" çıkışı nasıl alınır?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang'ın bir karakteri bayta dönüştürme işlevi var mı ve bunun tersi de geçerli mi?
Yanıtlar:
Yorumlanan dize değişmezleri, tek tek karakterlerin (muhtemelen çok baytlı) UTF-8 kodlamasını kullanan çift tırnak "" arasındaki karakter dizileridir. UTF-8'de ASCII karakterleri, ilk 128 Unicode karakterine karşılık gelen tek bayttır. Dizeler bayt dilimleri gibi davranır. Bir rune, bir Unicode kod noktasını tanımlayan bir tamsayı değeridir. Bu nedenle,
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1])) // ASCII only
fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8
fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
}
Çıktı:
e
e
界
Oku:
Dönüşümler ile ilgili Programlama Dili Spesifikasyonu bölümüne gidin .
The Go Blog: Go'daki dizeler, baytlar, sayılar ve karakterler
Nasıl hakkında bu ?
fmt.Printf("%c","HELLO"[1])
Peter'ın işaret ettiği gibi, ASCII'den daha fazlasına izin vermek için:
fmt.Printf("%c", []rune("HELLO")[1])
Dilimleme yoluyla da yapılabilir
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
NOT: Bu çözüm yalnızca ASCII karakterleri için çalışır.
Go'nun gerçekten böyle bir karakter türü yoktur. bayt genellikle ASCII karakterleri için kullanılır ve rune, Unicode karakterleri için kullanılır, ancak her ikisi de tam sayı türleri için takma adlardır (uint8 ve int32). Dolayısıyla, onları sayılar yerine karakter olarak yazdırılmaya zorlamak istiyorsanız, kullanmanız gerekir Printf("%c", x)
. %c
Biçim şartname herhangi bir tamsayı türü için çalışır.
Ayrıca string ile yazmayı da deneyebilirsiniz.
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1]))
}
Bir karakter dizisini yorumlamanın genel çözümü şudur string("HELLO"[1])
.
Rich'in çözümü de tabii ki işe yarıyor.
Bir dizedeki bir karakteri izole etmek için başka bir çözüm
package main
import "fmt"
func main() {
var word string = "ZbjTS"
// P R I N T
fmt.Println(word)
yo := string([]rune(word)[0])
fmt.Println(yo)
//I N D E X
x :=0
for x < len(word){
yo := string([]rune(word)[x])
fmt.Println(yo)
x+=1
}
}
dizi dizileri için ayrıca:
fmt.Println(string([]rune(sArray[0])[0]))
// = yorumlanmış satır
len("cafés")
> len([]rune("cafés"))
ve her yinelemede dizeyi O (n²) için yeniden dönüştürecek gerçekten kötü bir kod . Yapmanız yeterli for _, r := range word { fmt.Printf("%c", r) }
. Gerçekten bir dizinle döngü yapmak istiyorsanız for x := 0; x < limit; x++
. Lütfen yanıtlamadan önce dilin temellerini öğrenin sorular.
"हैलो"[:1]
size verir