Menu
Coddy logo textTech

Podsumowanie — tworzenie narzędzia

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 57 z 68.

challenge icon

Wyzwanie

Łatwy

Utwórz kompleksowy pakiet stringutil z funkcjami do manipulowania ciągami znaków i zademonstruj jego użycie w programie głównym. To wyzwanie sprawdzi Twoją umiejętność tworzenia własnego pakietu narzędziowego, implementowania eksportowanych funkcji i korzystania z pakietu w innym programie.

Otrzymasz dwa wejścia:

  • Ciąg zawierający specyfikacje funkcji w formacie "function1:description1,function2:description2" (np. "Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")
  • Ciąg zawierający ciągi testowe oddzielone pionowymi kreskami w formacie "string1|string2|string3" (np. "hello|Go Programming|WORLD")

Twoje zadanie:

  1. Utwórz pakiet stringutil, deklarując package stringutil
  2. Przetwórz pierwsze wejście, dzieląc je po przecinkach, aby uzyskać poszczególne specyfikacje funkcji
  3. Dla każdej specyfikacji funkcji podziel ją po dwukropkach, aby uzyskać nazwę funkcji i opis
  4. Zaimplementuj następujące eksportowane funkcje w pakiecie stringutil:
    • Reverse(s string) string — zwraca ciąg znaków z odwróconą kolejnością znaków
    • ToUpper(s string) string — zwraca ciąg znaków zamieniony na wielkie litery
    • ToLower(s string) string — zwraca ciąg znaków zamieniony na małe litery
    • Length(s string) int — zwraca długość ciągu znaków
  5. W programie głównym zaimportuj pakiet stringutil
  6. Wyświetl nagłówek pakietu: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. Wyświetl dostępne funkcje:
    • "Available functions in stringutil package:"
    • Dla każdej funkcji z pierwszego wejścia: "- [function_name]: [description]"
  8. Przetwórz drugie wejście, dzieląc je po pionowych kreskach, aby uzyskać poszczególne ciągi testowe
  9. Wyświetl nagłówek testowania: "Testing stringutil functions:"
  10. Dla każdego ciągu testowego zademonstruj działanie wszystkich funkcji:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. Oblicz i wyświetl statystyki:
    • "=== 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. Wyświetl najdłuższe i najkrótsze ciągi znaków:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. Wyświetl komunikat o zakończeniu: "Package demonstration completed successfully"

Użyj pakietu strings do dzielenia ciągów wejściowych i manipulowania tekstem oraz pakietu fmt do formatowania wyjścia. W funkcji Reverse musisz przekonwertować ciąg znaków na wycinek run, odwrócić ich kolejność i ponownie przekonwertować go na ciąg znaków. Pamiętaj, że wszystkie eksportowane funkcje muszą zaczynać się wielką literą, aby były dostępne z innych pakietów. To wyzwanie pokazuje, jak tworzyć wielokrotnego użytku pakiety narzędziowe i grupować powiązane funkcjonalności.

Spróbuj swoich sił

package main

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

// TODO: Utwórz tutaj funkcje pakietu stringutil
// Ponieważ nie możemy używać osobnych plików, zdefiniuj funkcje bezpośrednio tutaj
// Zwykle znajdowałyby się one w osobnym pliku pakietu

// func Reverse(s string) string {
//     // Zamień na runy, odwróć ich kolejność, a następnie zamień z powrotem na string
// }

// func ToUpper(s string) string {
//     // Użyj strings.ToUpper
// }

// func ToLower(s string) string {
//     // Użyj strings.ToLower
// }

// func Length(s string) int {
//     // Zwróć len(s)
// }

func main() {
	// Odczytaj dane wejściowe za pomocą bufio.Scanner, aby poprawnie obsłużyć spacje
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	functionSpecs := scanner.Text()
	
	scanner.Scan()
	testStrings := scanner.Text()
	
	// Przeanalizuj specyfikacje funkcji
	funcList := strings.Split(functionSpecs, ",")
	
	// Przeanalizuj ciągi testowe
	testList := strings.Split(testStrings, "|")
	
	// TODO: Napisz swój kod poniżej
	// 1. Wyświetl nagłówek pakietu
	// 2. Wyświetl dostępne funkcje z funcList (sprawdź długości tablic)
	// 3. Przetestuj wszystkie funkcje dla każdego ciągu testowego
	// 4. Oblicz i wyświetl statystyki
	// 5. Znajdź i wyświetl najdłuższy i najkrótszy ciąg (sprawdź, czy testList zawiera elementy)
	// 6. Wyświetl komunikat o zakończeniu
	
	// Pamiętaj, aby używać funkcji z pakietu stringutil, takich jak:
	// Reverse(testString)
	// ToUpper(testString)
	// ToLower(testString)
	// Length(testString)
}

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online