2017-04-24 11 views
2

私はstdinから2行の空白で区切られた整数の未知数を読み込もうとしています。私は各ラインintを独自のintスライスに保存したいと思います。空白で区切られた整数をstdinからintスライスに読み込みます

例えば、私の入力は次のようになります。

1 2 3 
4 5 6 

と私は2つの[]intにこれを読みたい:

[1,2,3] 
[4,5,6] 

これは私がこれまで持っているものです。 scanner.Scan()は私にラインを与えているが、私は[]intにその変換するかどうかはわかりません。

package main 
import (
    "fmt" 
    "os" 
    "bufio" 
) 

func main() { 
    var firstLine []int 
    var secondLine []int 

    scanner := bufio.NewScanner(os.Stdin) 
    for scanner.Scan() { 
     t := scanner.Text() 
    } 
} 

答えて

3

numbers.go

package main 

import (
    "bufio" 
    "fmt" 
    "os" 
    "strconv" 
    "strings" 
) 

func numbers(s string) []int { 
    var n []int 
    for _, f := range strings.Fields(s) { 
     i, err := strconv.Atoi(f) 
     if err == nil { 
      n = append(n, i) 
     } 
    } 
    return n 
} 

func main() { 
    var firstLine, secondLine []int 
    scanner := bufio.NewScanner(os.Stdin) 
    for i := 1; i <= 2 && scanner.Scan(); i++ { 
     switch i { 
     case 1: 
      firstLine = numbers(scanner.Text()) 
     case 2: 
      secondLine = numbers(scanner.Text()) 
     } 
    } 
    fmt.Println(firstLine) 
    fmt.Println(secondLine) 
} 

出力:

$ go run numbers.go 
1 2 3 
4 5 6 
[1 2 3] 
[4 5 6] 
$ 
1

だから、これは私がやってしまったものです。しかし、それを解決するためのより慣用的な方法があります。例えば

package main 
import (
    "fmt" 
    "os" 
    "bufio" 
    "strings" 
    "strconv" 
) 

func main() { 

    scanner := bufio.NewScanner(os.Stdin) 

    scanner.Scan() 
    parts := strings.Split(scanner.Text(), " ") 
    lineOne := createIntSlice(parts) 

    scanner.Scan() 
    parts = strings.Split(scanner.Text(), " ") 
    lineTwo := createIntSlice(parts) 

    fmt.Println(lineOne) 
    fmt.Println(lineTwo) 
} 

func createIntSlice(nums []string) []int { 
    var r []int 
    for _, v := range nums { 
     i, _ := strconv.Atoi(v) 
     r = append(r, i) 
    } 
    return r 
} 
+1

Goでは、戻り値([func(s * Scanner)Scan()bool'](https://golang.org/pkg/bufio/#Scanner.Scan))とエラー(['func Atoi (文字列)(int、エラー) '](https://golang.org/pkg/strconv/#Atoi))。 – peterSO

-1
package main 

import (
    "bufio" 
    "fmt" 
    "os" 
    "strings" 
) 

// You receive a string as parameter 
// List receives N As a string slice 
// Returns N as a string slice 
func number(n string) []string { 
    list := strings.Fields(n) 

    return list 
} 

func main() { 
    scanner := bufio.NewScanner(os.Stdin) //Receiving user data ... 

    list := make([][]string, 0) // Declare a slice to receive other slices inside it 

    for scanner.Scan() { // Scrolls all typed data to true 

     // If the user does not type anything, that is, if he presses Enter an interrupt will occur 
     if scanner.Text() == "" { 
      break 
     } else { 
      list = append(list, number(scanner.Text())) // Adding the slice inside list 
     } 
    } 

    fmt.Println(list) // print list 
} 

すべてのデータが行くと、文字列として返しますが、あなたがそれらを変換することができています整数を簡単に。

関連する問題