Podsumowanie — tworzenie narzędzia
Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 57 z 68.
Wyzwanie
ŁatwyUtwó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:
- Utwórz pakiet
stringutil, deklarującpackage stringutil - Przetwórz pierwsze wejście, dzieląc je po przecinkach, aby uzyskać poszczególne specyfikacje funkcji
- Dla każdej specyfikacji funkcji podziel ją po dwukropkach, aby uzyskać nazwę funkcji i opis
- Zaimplementuj następujące eksportowane funkcje w pakiecie
stringutil:Reverse(s string) string— zwraca ciąg znaków z odwróconą kolejnością znakówToUpper(s string) string— zwraca ciąg znaków zamieniony na wielkie literyToLower(s string) string— zwraca ciąg znaków zamieniony na małe literyLength(s string) int— zwraca długość ciągu znaków
- W programie głównym zaimportuj pakiet
stringutil - Wyświetl nagłówek pakietu:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - Wyświetl dostępne funkcje:
"Available functions in stringutil package:"- Dla każdej funkcji z pierwszego wejścia:
"- [function_name]: [description]"
- Przetwórz drugie wejście, dzieląc je po pionowych kreskach, aby uzyskać poszczególne ciągi testowe
- Wyświetl nagłówek testowania:
"Testing stringutil functions:" - 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]"
- 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]"
- Wyświetl najdłuższe i najkrótsze ciągi znaków:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- 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
1Zaawansowane sterowanie przepływem
Instrukcja switch z `fallthrough`Przerywanie zagnieżdżonych pętliKontynuowanie określonej pętliInstrukcja `goto`Podsumowanie — zaawansowane sterowanie pętlami4Projekt: Prosta lista zadań
Konfiguracja projektuDodawanie zadania2Struktury i metody
Definiowanie metod dla strukturOdbiorniki przez wartośćOdbiorniki przez wskaźnikWybór odbiornikówMetody a funkcjePodsumowanie — działanie struktur5Mapy w szczegółach
Mapy strukturWskaźniki jako wartości mapSprawdzanie, czy mapy są nilPorównywanie mapPodsumowanie — licznik częstości słów3Interfejsy (podstawy)
Czym jest interfejs?Definiowanie interfejsuImplementowanie interfejsuUżywanie typów interfejsowychPusty interfejsAsercje typuPrzełącznik typówPodsumowanie – kształty i zachowania6Idiomatyczny Go: zbiory
Idiom zbioru w GoTworzenie zbioruDodawanie elementów do zbioruSprawdzanie przynależnościUsuwanie elementów ze zbioruIterowanie po zbiorzePodsumowanie – unikalne nazwy użytkowników9Pakiety i zakres
Czym jest pakiet?Eksportowane a nieeksportowaneTworzenie prostego pakietuAliasy pakietówIdentyfikator pusty `_`Funkcja `init`Podsumowanie — tworzenie narzędziaPoćwicz samodzielnie: Kompilator Go online