将字符串转换为字符串类型的切片

时间:2017-03-05 18:02:55

标签: go

在下面的代码中,当我检查s[i]时,它给出了二进制数而不是字符。代码仍然有效,但如何让s[i]返回一个字符,同时仍然使用s类型字符串作为参数?

func main() {

        var ip string
        fmt.Println("Enter string:")
        fmt.Scanf("%s\n", &ip)
        ip = strings.ToLower(ip)
        fmt.Println(isP(ip))
    }
    //Function to test if the string entered is a Palindrome

    func isP(s string) string {
        mid := len(s) / 2
        last := len(s) - 1
        for i := 0; i < mid; i++ {
            if s[i] != s[last-i] {
                return "NO. It's not a Palimdrome."
            }
        }
        return "YES! You've entered a Palindrome"
    }

4 个答案:

答案 0 :(得分:2)

如果你想将字符串转换为[]字符串,你也可以只使用strings.Split(s,&#34;&#34;)

答案 1 :(得分:1)

例如,

package main

import (
    "fmt"
    "strings"
)

func isPalindrome(s string) bool {
    s = strings.ToLower(s)
    r := []rune(s)
    mid := len(r) / 2
    last := len(r) - 1
    for i := 0; i < mid; i++ {
        if r[i] != r[last-i] {
            return false
        }
    }
    return true
}

func main() {
    var s string
    fmt.Println("Enter string:")
    fmt.Scanf("%s\n", &s)
    fmt.Println(s, isPalindrome(s))
}

输出:

Enter string:
123
123 false
Enter string:
121
121 true
Enter string:
abba
abba true
Enter string:
世界世
世界世 true

Go字符string是UTF-8编码的字符序列。 UTF-8是可变长度字符编码。 s[i]是字节而不是字符。 rune(代码点)是一个字符。使用string(r)rune转换为可打印的string。例如,

package main

import (
    "fmt"
)

func main() {
    s := "Hello, 世界"
    for _, r := range s {
        fmt.Print(string(r))
    }
    fmt.Println()
}

输出:

Hello, 世界

参考文献:

Unicode - Wikipedia

Strings, bytes, runes and characters in Go

答案 2 :(得分:0)

如上所述,您可以使用string(s[i])将其转换为字符,也可以使用fmt.Printf("%c", s[i])打印由相应的Unicode代码点表示的字符。

答案 3 :(得分:0)

您可以使用 string() 返回字符。

示例:setAttributes(elem, {"src": "http://example.com/something.jpeg", "height": "100%", ...});