在 golang 中读取行
Read line in golang
在 Go 中有很多选项可以做到这一点。例如:
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
或
reader := bufio.NewReader(os.Stdin)
text, _ := reader.ReadString('\n')
两者都不适用于我的情况。我找不到换行扫描不起作用的原因。
这是我正在处理的问题:https://www.hackerrank.com/challenges/30-dictionaries-and-maps
这是我的代码:
package main
import (
"fmt"
"bufio"
"os"
"strings"
)
func main() {
var count int
fmt.Scan(&count)
m := make(map[string]string)
for i := 0; i<count; i++{
reader := bufio.NewReader(os.Stdin)
text,err := reader.ReadString('\n')
if err != nil {
fmt.Println(err)
}
value := strings.Fields(text)
m[value[0]] = value[1]
}
var names []string
for i := 0; i<count; i++{
var name string
fmt.Scan(&name)
names = append(names,name)
}
for j:= 0; j<len(names);j++{
if m[names[j]] != ""{
fmt.Println(names[j] +" = "+ m[names[j]])
}else{
fmt.Println("Not found")
}
}
}
它在我的编辑器中工作,但是当我使用问题的输入时,它不起作用。
首先,您在循环中每次启动 reader。
其次,如果您使用 Reader,请坚持使用。您初始化输入 reader,然后尝试返回 fmt.Scan,但是 Reader 已经得到您的输入。
第三,请记住您需要 .Trim()
输入
package main
import (
"fmt"
"bufio"
"os"
"strings"
)
func main() {
var count int
fmt.Scan(&count)
reader := bufio.NewReader(os.Stdin)
m := make(map[string]string)
for i := 0; i<count; i++{
text,err := reader.ReadString('\n')
if err != nil {
fmt.Println(err)
}
value := strings.Fields(text)
m[value[0]] = value[1]
}
var names []string
for i := 0; i<count; i++{
var name string
name, _ = reader.ReadString('\n')
names = append(names,strings.Trim(name, " \n"))
}
for _, name := range names {
phone, found := m[name]
if found {
fmt.Println(name +"="+ phone)
}else{
fmt.Println("Not found")
}
}
}
根据评论中的要求,这是我的工作示例:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
phonebook := make(map[string]int)
var count int
fmt.Scan(&count)
for i := 0; i < count; i++ {
var name string
var number int
fmt.Scan(&name, &number)
phonebook[name] = number
}
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
name := scanner.Text()
if number, ok := phonebook[name]; ok {
fmt.Printf("%s=%d\n", name, number)
} else {
fmt.Println("Not found")
}
}
}
在 Go 中有很多选项可以做到这一点。例如:
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
或
reader := bufio.NewReader(os.Stdin)
text, _ := reader.ReadString('\n')
两者都不适用于我的情况。我找不到换行扫描不起作用的原因。
这是我正在处理的问题:https://www.hackerrank.com/challenges/30-dictionaries-and-maps
这是我的代码:
package main
import (
"fmt"
"bufio"
"os"
"strings"
)
func main() {
var count int
fmt.Scan(&count)
m := make(map[string]string)
for i := 0; i<count; i++{
reader := bufio.NewReader(os.Stdin)
text,err := reader.ReadString('\n')
if err != nil {
fmt.Println(err)
}
value := strings.Fields(text)
m[value[0]] = value[1]
}
var names []string
for i := 0; i<count; i++{
var name string
fmt.Scan(&name)
names = append(names,name)
}
for j:= 0; j<len(names);j++{
if m[names[j]] != ""{
fmt.Println(names[j] +" = "+ m[names[j]])
}else{
fmt.Println("Not found")
}
}
}
它在我的编辑器中工作,但是当我使用问题的输入时,它不起作用。
首先,您在循环中每次启动 reader。
其次,如果您使用 Reader,请坚持使用。您初始化输入 reader,然后尝试返回 fmt.Scan,但是 Reader 已经得到您的输入。
第三,请记住您需要 .Trim()
输入
package main
import (
"fmt"
"bufio"
"os"
"strings"
)
func main() {
var count int
fmt.Scan(&count)
reader := bufio.NewReader(os.Stdin)
m := make(map[string]string)
for i := 0; i<count; i++{
text,err := reader.ReadString('\n')
if err != nil {
fmt.Println(err)
}
value := strings.Fields(text)
m[value[0]] = value[1]
}
var names []string
for i := 0; i<count; i++{
var name string
name, _ = reader.ReadString('\n')
names = append(names,strings.Trim(name, " \n"))
}
for _, name := range names {
phone, found := m[name]
if found {
fmt.Println(name +"="+ phone)
}else{
fmt.Println("Not found")
}
}
}
根据评论中的要求,这是我的工作示例:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
phonebook := make(map[string]int)
var count int
fmt.Scan(&count)
for i := 0; i < count; i++ {
var name string
var number int
fmt.Scan(&name, &number)
phonebook[name] = number
}
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
name := scanner.Text()
if number, ok := phonebook[name]; ok {
fmt.Printf("%s=%d\n", name, number)
} else {
fmt.Println("Not found")
}
}
}