2017-03-05 3 views
0

Im folgenden Code, wenn ich s[i] inspiziere gibt es mir binäre Zahlen anstelle von Zeichen. Der Code funktioniert immer noch, aber wie kann ich s[i] erhalten, um ein Zeichen zurückzugeben, während ich immer noch den s-Typ string als Parameter verwende?Konvertieren von String in Slice des Stringtyps

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

Charaktere _are_ Zahlen. Sie sollten jedoch ein Stück 'Rune's verwenden. – tkausl

+0

Verwenden Sie einfach die Funktion 'string()'. 'string (s [i])' gibt das Zeichen zurück. – apxp

+0

kann jemand von Ihnen eine Antwort schreiben? @tkausl – chefcurry7

Antwort

0

Zum Beispiel

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)) 
} 

Ausgang:

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

Ein Go-Zeichen string ist eine UTF-8-codierte Zeichenfolge. UTF-8 ist eine Zeichencodierung mit variabler Länge. s[i] ist ein Byte kein Zeichen. A rune (Codepunkt) ist ein Zeichen. Verwenden Sie string(r), um eine rune in eine druckbare string zu konvertieren. Zum Beispiel

package main 

import (
    "fmt" 
) 

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

Ausgang:

Hello, 世界 

Referenzen:

Unicode - Wikipedia

Strings, bytes, runes and characters in Go

0

Wie oben dies in den Kommentaren erwähnt, können Sie string(s[i]) es verwenden, um ein Zeichen zu konvertieren oder Sie können fmt.Printf("%c", s[i]) verwenden das Zeichen durch den entsprechenden Unicode-Codepunkt dargestellt zu drucken.

0

Wenn Sie String in eine [] Zeichenfolge konvertieren können Sie auch nur strings.Split verwenden (s, "")