Menu
Coddy logo textTech

Итоги: создание утилиты

Часть раздела Логика и управление потоком путешествия по 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 вам потребуется преобразовать строку в срез рун (slice of runes), изменить порядок на обратный и преобразовать обратно в строку. Помните, что все экспортируемые функции должны начинаться с заглавной буквы, чтобы быть доступными из других пакетов. Эта задача демонстрирует, как создавать переиспользуемые пакеты утилит и организовывать связанную функциональность вместе.

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

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)
}

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