Язык Go. Упражнения на срезы


Разберем несколько примеров программ на Го по срезам (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)

}

 


Запись опубликована в рубрике Go. Добавьте в закладки постоянную ссылку.

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.