Menu
Coddy logo textTech

Riepilogo: creare un’utilità

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 57 di 68.

challenge icon

Sfida

Facile

Crea un pacchetto stringutil completo con funzioni di manipolazione delle stringhe e dimostrane l'utilizzo in un programma principale. Questa sfida metterà alla prova la tua capacità di creare un pacchetto di utilità personalizzato, implementare funzioni esportate e utilizzare il tuo pacchetto da un altro programma.

Riceverai due input:

  • Una stringa contenente specifiche delle funzioni nel formato "function1:description1,function2:description2" (ad es., "Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")
  • Una stringa contenente stringhe di prova separate da pipe nel formato "string1|string2|string3" (ad es., "hello|Go Programming|WORLD")

Il tuo compito è:

  1. Creare un pacchetto stringutil dichiarando package stringutil
  2. Analizzare il primo input suddividendolo in corrispondenza delle virgole per ottenere le singole specifiche delle funzioni
  3. Per ogni specifica di funzione, suddividerla in corrispondenza dei due punti per ottenere il nome e la descrizione della funzione
  4. Implementare le seguenti funzioni esportate nel tuo pacchetto stringutil:
    • Reverse(s string) string - restituisce la stringa con i caratteri in ordine inverso
    • ToUpper(s string) string - restituisce la stringa convertita in maiuscolo
    • ToLower(s string) string - restituisce la stringa convertita in minuscolo
    • Length(s string) int - restituisce la lunghezza della stringa
  5. Nel programma principale, importare il pacchetto stringutil
  6. Visualizzare l'intestazione del pacchetto: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. Visualizzare le funzioni disponibili:
    • "Available functions in stringutil package:"
    • Per ogni funzione del primo input: "- [function_name]: [description]"
  8. Analizzare il secondo input suddividendolo in corrispondenza delle pipe per ottenere le singole stringhe di prova
  9. Visualizzare l'intestazione dei test: "Testing stringutil functions:"
  10. Per ogni stringa di prova, dimostrare tutte le funzioni:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. Calcolare e visualizzare le statistiche:
    • "=== 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. Visualizzare le stringhe più lunga e più corta:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. Visualizzare il messaggio di completamento: "Package demonstration completed successfully"

Usa il pacchetto strings per suddividere le stringhe di input e manipolare il testo, e il pacchetto fmt per l'output formattato. Per la funzione Reverse, dovrai convertire la stringa in una slice di rune, invertire l'ordine e riconvertirla in una stringa. Ricorda che tutte le funzioni esportate devono iniziare con una lettera maiuscola per essere accessibili da altri pacchetti. Questa sfida mostra come creare pacchetti di utilità riutilizzabili e organizzare insieme funzionalità correlate.

Provalo tu

package main

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

// TODO: Crea qui le funzioni del pacchetto stringutil
// Dato che non possiamo usare file separati, definisci le funzioni direttamente
// Normalmente queste funzioni si troverebbero in un file separato del pacchetto

// func Reverse(s string) string {
//     // Converti in rune, inverti l'ordine, poi riconverti in string
// }

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

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

// func Length(s string) int {
//     // Restituisci len(s)
// }

func main() {
	// Leggi l'input usando bufio.Scanner per gestire correttamente gli spazi
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	functionSpecs := scanner.Text()
	
	scanner.Scan()
	testStrings := scanner.Text()
	
	// Analizza le specifiche delle funzioni
	funcList := strings.Split(functionSpecs, ",")
	
	// Analizza le stringhe di test
	testList := strings.Split(testStrings, "|")
	
	// TODO: Scrivi il tuo codice qui sotto
	// 1. Visualizza l'intestazione del package
	// 2. Visualizza le funzioni disponibili in funcList (controlla le lunghezze degli array)
	// 3. Prova tutte le funzioni con ogni stringa di test
	// 4. Calcola e visualizza le statistiche
	// 5. Trova e visualizza le stringhe più lunghe e più corte (controlla se testList contiene elementi)
	// 6. Visualizza il messaggio di completamento
	
	// Ricorda di usare le funzioni del package stringutil, ad esempio:
	// Reverse(testString)
	// ToUpper(testString)
	// ToLower(testString)
	// Length(testString)
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online