Menu
CoddyTech

Повторение — создание утилиты

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 57 из 68.

challenge icon

Задание

Легко

Создай комплексный пакет stringutil с функциями для обработки строк и продемонстрируй его использование в основной программе. Это задание проверит твою способность создавать собственный пакет утилит, реализовывать экспортируемые функции и использовать свой пакет из другой программы.

Тебе будут предоставлены два входных значения:

  • Строка, содержащая спецификации функций в формате "function1:description1,function2:description2" (например, "Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")
  • Строка, содержащая тестовые строки, разделённые вертикальными чертами, в формате "string1|string2|string3" (например, "hello|Go Programming|WORLD")

Твоя задача:

  1. Создать пакет stringutil, объявив package stringutil
  2. Разобрать первый вход, разделив его по запятым, чтобы получить отдельные спецификации функций
  3. Для каждой спецификации функции разделить её по двоеточиям, чтобы получить имя и описание функции
  4. Реализовать следующие экспортируемые функции в пакете stringutil:
    • Reverse(s string) string — возвращает строку с символами в обратном порядке
    • ToUpper(s string) string — возвращает строку, преобразованную в верхний регистр
    • ToLower(s string) string — возвращает строку, преобразованную в нижний регистр
    • Length(s string) int — возвращает длину строки
  5. Импортировать пакет stringutil в основную программу
  6. Вывести заголовок пакета: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. Вывести доступные функции:
    • "Available functions in stringutil package:"
    • Для каждой функции из первого входа: "- [function_name]: [description]"
  8. Разобрать второй вход, разделив его по вертикальным чертам, чтобы получить отдельные тестовые строки
  9. Вывести заголовок тестирования: "Testing stringutil functions:"
  10. Для каждой тестовой строки продемонстрировать все функции:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. Вычислить и вывести статистику:
    • "=== STATISTICS ==="
    • "Total test strings processed: [number_of_test_strings]"
    • "Functions available in package: [number_of_functions_from_first_input]"
    • "Total function calls made: [total_function_calls]"
  12. Вывести самую длинную и самую короткую строки:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. Вывести сообщение о завершении: "Package demonstration completed successfully"

Используй пакет strings для разделения входных строк и обработки текста, а пакет fmt — для форматированного вывода. Для функции Reverse нужно преобразовать строку в срез рун, изменить порядок элементов на обратный и преобразовать результат обратно в строку. Помни, что все экспортируемые функции должны начинаться с заглавных букв, чтобы их можно было использовать из других пакетов. Это задание демонстрирует, как создавать повторно используемые пакеты утилит и объединять в них связанную функциональность.

Попробуйте сами

package main

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

// TODO: Создайте здесь функции пакета stringutil
// Поскольку мы не можем использовать отдельные файлы, определите функции прямо здесь
// Обычно они находились бы в отдельном файле пакета

// func Reverse(s string) string {
//     // Преобразуйте в руны, разверните, затем преобразуйте обратно в строку
// }

// func ToUpper(s string) string {
//     // Используйте strings.ToUpper
// }

// func ToLower(s string) string {
//     // Используйте strings.ToLower
// }

// func Length(s string) int {
//     // Верните len(s)
// }

func main() {
	// Считайте ввод с помощью bufio.Scanner, чтобы правильно обрабатывать пробелы
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	functionSpecs := scanner.Text()
	
	scanner.Scan()
	testStrings := scanner.Text()
	
	// Разберите спецификации функций
	funcList := strings.Split(functionSpecs, ",")
	
	// Разберите тестовые строки
	testList := strings.Split(testStrings, "|")
	
	// TODO: Напишите свой код ниже
	// 1. Выведите заголовок пакета
	// 2. Выведите доступные функции из funcList (проверьте длину массива)
	// 3. Проверьте все функции на каждой тестовой строке
	// 4. Вычислите и выведите статистику
	// 5. Найдите и выведите самую длинную и самую короткую строки (проверьте, есть ли элементы в testList)
	// 6. Выведите сообщение о завершении
	
	// Не забудьте использовать функции вашего пакета stringutil, например:
	// Reverse(testString)
	// ToUpper(testString)
	// ToLower(testString)
	// Length(testString)
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Go