จะรับเอาต์พุต "E" มากกว่า 69 ได้อย่างไร?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang มีฟังก์ชันในการแปลงถ่านเป็นไบต์หรือไม่และในทางกลับกัน?
จะรับเอาต์พุต "E" มากกว่า 69 ได้อย่างไร?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang มีฟังก์ชันในการแปลงถ่านเป็นไบต์หรือไม่และในทางกลับกัน?
คำตอบ:
ลิเทอรัลสตริงที่ตีความหมายคือลำดับอักขระระหว่างเครื่องหมายคำพูดคู่ "" โดยใช้การเข้ารหัส UTF-8 (อาจเป็นหลายไบต์) ของอักขระแต่ละตัว ใน UTF-8 อักขระ ASCII เป็นไบต์เดียวที่สอดคล้องกับอักขระ Unicode 128 ตัวแรก สตริงทำงานเหมือนชิ้นส่วนของไบต์ รูนคือค่าจำนวนเต็มที่ระบุจุดรหัส Unicode ดังนั้น,
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
}
เอาท์พุต:
e
e
界
อ่าน:
ไปเขียนโปรแกรมภาษาข้อมูลจำเพาะส่วนที่เกี่ยวกับการแปลง
แล้วเรื่องนี้ล่ะ?
fmt.Printf("%c","HELLO"[1])
ดังที่ปีเตอร์ชี้ให้เห็นเพื่อให้ได้มากกว่า ASCII:
fmt.Printf("%c", []rune("HELLO")[1])
สามารถทำได้โดยการหั่นด้วย
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
หมายเหตุ:โซลูชันนี้ใช้ได้กับอักขระ ASCII เท่านั้น
Go ไม่มีประเภทอักขระเช่นนี้จริงๆ ไบต์มักใช้สำหรับอักขระ ASCII และรูนใช้สำหรับอักขระ Unicode แต่ทั้งคู่เป็นเพียงนามแฝงสำหรับประเภทจำนวนเต็ม (uint8 และ int32) Printf("%c", x)
ดังนั้นถ้าคุณต้องการที่จะบังคับให้พวกเขาที่จะพิมพ์เป็นตัวอักษรแทนตัวเลขที่คุณจำเป็นต้องใช้ %c
กำหนดรูปแบบการทำงานสำหรับประเภทจำนวนเต็มใด ๆ
คุณยังสามารถลองพิมพ์ด้วยสตริง
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1]))
}
string("HELLO"[1])
การแก้ปัญหาทั่วไปที่จะตีความถ่านเป็นสตริงคือ
โซลูชันของ Rich ก็ใช้ได้ผลเช่นกัน
ลองทำเช่นนี้เพื่อให้ได้ charecters ตามดัชนี
package main
import (
"fmt"
"strings"
)
func main() {
str := strings.Split("HELLO","")
fmt.Print(str[1])
}
อักขระสตริงคืออักษรรูนดังนั้นในการพิมพ์คุณต้องเปลี่ยนกลับเป็นสตริง
fmt.Print(string("HELLO"[1]))
อีกวิธีหนึ่งในการแยกอักขระในสตริง
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
}
}
สำหรับอาร์เรย์สตริงยัง:
fmt.Println(string([]rune(sArray[0])[0]))
// = แสดงความคิดเห็นบรรทัด
len("cafés")
> len([]rune("cafés"))
และอาจแปลงสตริงซ้ำในการทำซ้ำแต่ละครั้งสำหรับ O (n²) เพียงแค่ทำfor _, r := range word { fmt.Printf("%c", r) }
ถ้าคุณต้องการวนซ้ำด้วยดัชนีfor x := 0; x < limit; x++
จริงๆโปรดเรียนรู้พื้นฐานของภาษาก่อนตอบ คำถาม
"हैलो"[:1]
ให้คุณ