Разберем несколько примеров программ на Го по срезам (slice).
Начнем.. Пользователь вводит два ряда чисел. Наша задача собрать их в одном срезе, удалив дубликаты. В качестве упражнения, будем использовать не карты, а обычные срезы.
Код:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func getInput(r *bufio.Reader) []int {
input, _ := r.ReadString('\n')
input = strings.TrimSpace(input)
str2slice := strings.Split(input, " ")
var nums []int
for _, v := range str2slice {
num, _ := strconv.Atoi(v)
nums = append(nums, num)
}
return nums
}
func main() {
r := bufio.NewReader(os.Stdin)
line1 := getInput(r)
line2 := getInput(r)
var dupl bool // duplicates flag
for _, v := range line2 {
dupl = false
for _, y := range line1 {
if v == y {
dupl = true
}
}
if !dupl {
line1 = append(line1, v)
}
}
fmt.Println(line1)
}
Домашка: использовать не срезы, а карты (map) — будет проще и быстрее проверять дубликаты.
Пользователь вводит две строки — строку и фильтр. Задача исключить слова фильтра из первой строки. Пример вывода:
cat dog a b c fox
a god fox c
[cat dog b]
Код:
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func getInput(r *bufio.Reader) []string {
input, _ := r.ReadString('\n')
input = strings.TrimSpace(input)
str2slice := strings.Split(input, " ")
return str2slice
}
func main() {
r := bufio.NewReader(os.Stdin)
line := getInput(r)
filter := getInput(r)
var exist bool
var words []string
for i := range line {
exist = false
for j := range filter {
if line[i] == filter[j] {
exist = true
break
}
}
if !exist {
words = append(words, line[i])
}
}
fmt.Println(words)
}
Найти самое длинное слово в предложении без помощи len()
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func getInput(r *bufio.Reader) string {
input, _ := r.ReadString('\n')
return strings.ToLower(strings.TrimSpace(input))
}
func main() {
r := bufio.NewReader(os.Stdin)
line := getInput(r)
slice := strings.Split(line, " ")
var max int
var current int
var word string
for _, v := range slice {
current = 0
for range v {
current++
}
if current > max {
max = current
word = v
}
}
fmt.Println(word)
}
