Menu
Coddy logo textTech

Recap – Erstellen eines Utilitys

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 57 von 68.

challenge icon

Aufgabe

Einfach

Erstelle ein umfassendes stringutil-Paket mit Funktionen zur Zeichenkettenmanipulation und demonstriere seine Verwendung in einem Hauptprogramm. Diese Herausforderung testet deine Fähigkeit, ein eigenes Dienstprogrammpaket zu erstellen, exportierte Funktionen zu implementieren und dein Paket aus einem anderen Programm zu verwenden.

Du erhältst zwei Eingaben:

  • Eine Zeichenkette mit Funktionsspezifikationen im Format "function1:description1,function2:description2" (z. B. "Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")
  • Eine Zeichenkette mit durch Pipes getrennten Testzeichenketten im Format "string1|string2|string3" (z. B. "hello|Go Programming|WORLD")

Deine Aufgabe ist es:

  1. Ein stringutil-Paket zu erstellen, indem du package stringutil deklarierst
  2. Die erste Eingabe durch Aufteilen an Kommas zu analysieren, um einzelne Funktionsspezifikationen zu erhalten
  3. Für jede Funktionsspezifikation an Doppelpunkten aufzuteilen, um den Funktionsnamen und die Beschreibung zu erhalten
  4. Die folgenden exportierten Funktionen in deinem stringutil-Paket zu implementieren:
    • Reverse(s string) string – gibt die Zeichenkette mit umgekehrter Zeichenreihenfolge zurück
    • ToUpper(s string) string – gibt die in Großbuchstaben umgewandelte Zeichenkette zurück
    • ToLower(s string) string – gibt die in Kleinbuchstaben umgewandelte Zeichenkette zurück
    • Length(s string) int – gibt die Länge der Zeichenkette zurück
  5. In deinem Hauptprogramm das stringutil-Paket zu importieren
  6. Die Paketüberschrift anzuzeigen: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. Die verfügbaren Funktionen anzuzeigen:
    • "Available functions in stringutil package:"
    • Für jede Funktion aus der ersten Eingabe: "- [function_name]: [description]"
  8. Die zweite Eingabe durch Aufteilen an Pipes zu analysieren, um einzelne Testzeichenketten zu erhalten
  9. Die Testüberschrift anzuzeigen: "Testing stringutil functions:"
  10. Für jede Testzeichenkette alle Funktionen zu demonstrieren:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. Statistiken zu berechnen und anzuzeigen:
    • "=== 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. Die längsten und kürzesten Zeichenketten anzuzeigen:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. Die Abschlussmeldung anzuzeigen: "Package demonstration completed successfully"

Verwende das strings-Paket, um Eingabezeichenketten aufzuteilen und Text zu bearbeiten, sowie das fmt-Paket für formatierte Ausgaben. Für die Funktion Reverse musst du die Zeichenkette in ein Slice von Runen umwandeln, die Reihenfolge umkehren und sie wieder in eine Zeichenkette umwandeln. Denke daran, dass alle exportierten Funktionen mit Großbuchstaben beginnen müssen, damit sie aus anderen Paketen zugänglich sind. Diese Herausforderung zeigt, wie man wiederverwendbare Dienstprogrammpakete erstellt und zusammengehörige Funktionen gemeinsam organisiert.

Probier es selbst

package main

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

// TODO: Erstellen Sie hier Ihre stringutil-Paketfunktionen
// Da wir keine separaten Dateien verwenden können, definieren Sie die Funktionen direkt
// Diese würden sich normalerweise in einer separaten Paketdatei befinden

// func Reverse(s string) string {
//     // In Runen konvertieren, umkehren, zurück in String konvertieren
// }

// func ToUpper(s string) string {
//     // strings.ToUpper verwenden
// }

// func ToLower(s string) string {
//     // strings.ToLower verwenden
// }

// func Length(s string) int {
//     // len(s) zurückgeben
// }

func main() {
	// Eingabe mit bufio.Scanner lesen, um Leerzeichen korrekt zu verarbeiten
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	functionSpecs := scanner.Text()
	
	scanner.Scan()
	testStrings := scanner.Text()
	
	// Funktionsspezifikationen parsen
	funcList := strings.Split(functionSpecs, ",")
	
	// Test-Strings parsen
	testList := strings.Split(testStrings, "|")
	
	// TODO: Schreiben Sie Ihren Code unten
	// 1. Paket-Header anzeigen
	// 2. Verfügbare Funktionen aus funcList anzeigen (Array-Längen prüfen)
	// 3. Alle Funktionen mit jedem Test-String testen
	// 4. Statistiken berechnen und anzeigen
	// 5. Längste/kürzeste Strings finden und anzeigen (prüfen, ob testList Elemente enthält)
	// 6. Abschlussmeldung anzeigen
	
	// Denken Sie daran, Ihre stringutil-Paketfunktionen zu verwenden, wie:
	// Reverse(testString)
	// ToUpper(testString)
	// ToLower(testString)
	// Length(testString)
}

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-Go-Compiler