👣 Создание списка введёных слов



▶️Итак, есть такая задачка: пользователь вводит строку, а программа составляет список слов.

К примеру, при вводе строки "Привет мир, hello world, hello мир, привет world" на выходе должен получится такой список список :

привет - 2;

мир - 2;

hello - 2;

world -2;


Как написать такую функцию?





▶️Можно сделать как-то так; тут все буквы приводятся к нижнему регистру, иначе слова "Привет" и "привет" будут считаться разными словами:

package main



import (

"fmt"

"regexp"

"strings"

)



//Создаём структуру для хранения кол-ва слов и самих слов

type Words struct {

i int // кол-во слов

s string // тут само слово

}



func main() {

str := "Привет мир, hello world, hello мир, привет world, , "

// приводим всё в нижний регистр для устранения проблем с различием слов 'Привет' и 'привет'

str = strings.ToLower(str)

// Разбиваем строку на массив строк по регулярному выражению, ищем либо ',' либо ' ' (пробел)

arr := regexp.MustCompile("[,| ]+").Split(str, -1)

//создаём массив структур для хранения результатов

ret := []Words{}

chk := false

// проходим циклом для сранения есть ли такое слово в массиве ret или нет

k := 0

for i := 0; i < len(arr); i++ {

chk = false

for k = 0; k < len(ret); k++ {

if arr[i] == ret[k].s {

// если слово уже есть увеличивем счётчик и слово пропускаем

ret[k].i += 1

chk = true

}

}

// если chk true то слово уже есть и ничего делать ненадо

if !chk {

// проверяем что в строке есть буквы и если они есть добавляем её в массив с результатами

if regexp.MustCompile("[a-zа-яё]+").MatchString(arr[i]) {

tmp := Words{i: 1, s: arr[i]}

ret = append(ret, tmp)

}



}

}

// выводим результат

for l := 0; l < len(ret); l++ {

fmt.Printf("%v - %v\n", (ret[l].s), (ret[l].i))

}



}


P.S.: проверка if regexp.MustCompile("[a-zа-яё]+").MatchString(arr[i]) нужна для того чтобы в результаты не пролез мусор в виде пробелов если пользователь введёт что-то типа:

"Привет мир, hello world, hello мир, привет world,   , "


хотя это можно сделать и красивее.



@golang_interview