Menu
CoddyTech

回顾:构建一个实用工具

本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 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. 通过声明 package stringutil 来创建 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 函数,你需要将字符串转换为 rune 切片,颠倒顺序,再转换回字符串。请记住,所有导出函数都必须以大写字母开头,才能从其他包访问。本挑战将演示如何创建可复用的工具包,并将相关功能组织在一起。

亲手试试

package main

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

// TODO: 在这里创建 stringutil 包的函数
// 由于不能使用单独的文件,直接定义这些函数
// 这些函数通常会放在单独的包文件中

// func Reverse(s string) string {
//     // 转换为 rune,反转后再转换回字符串
// }

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

逻辑与流程中的所有课

自己练习: Go 在线编译器