2017-03-05 223 views
0

在下面的代码中,当我检查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" 
    } 
+1

人物_are_号码。尽管如此,你应该使用一片'符文'。 – tkausl

+0

只需使用'string()'函数即可。 'string(s [i])'返回字符。 – apxp

+0

你们任何人都可以写出答案吗? @tkausl – chefcurry7

回答

0

例如,

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]是一个字节而不是字符。 A 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

0

如上所述,这在评论中提到的,你可以使用string(s[i])将其转换为一个字符,或者您可以使用fmt.Printf("%c", s[i])打印由相应的Unicode代码点表示的字符。

0

如果你想字符串转换为[]字符串,你也可以只用strings.Split(S, “”)