Go语言编程实践:正则与数据结构

19、开发一个Go实用程序,使用正则表达式来匹配200到400之间的整数。

以下是一个满足需求的Go程序示例:

package main

import ( 
  "fmt" 
  "regexp"
)

func main() { 
  // 定义正则表达式 
  pattern := "(2[0-9]{2}|3[0-9]{2}|400)" 
  regex := regexp.MustCompile(pattern) 

  // 测试字符串 
  testStr := "123 250 378 401" 
  matches := regex.FindAllString(testStr, -1) 

  // 输出匹配结果 
  fmt.Println("匹配到的200到400之间的整数:") 
  for _, match := range matches { 
    fmt.Println(match) 
  }
}

上述代码中,定义了一个正则表达式 (2[0-9]{2}|3[0-9]{2}|400) 用于匹配200到400之间的整数,然后使用 regexp.MustCompile 函数编译该正则表达式,最后在测试字符串中查找匹配项并输出结果。

20、修改 findIPv4.go 工具中的 findIP() 函数,使正则表达式只编译一次,而不是每次调用 findIP() 函数时都编译。

可以将正则表达式的编译移到函数外部,作为全局变量,这样就只会编译一次。示例代码如下:

package main

import (
    "fmt"
    "regexp"
)

// 全局变量,正则表达式只编译一次
var matchMe = func() *regexp.Regexp {
    partIP := "(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])"
    grammar := partIP + "\." + partIP + "\." + partIP + "\." + partIP
    return regexp.MustCompile(grammar)
}()

func findIP(input string) string {
    return matchMe.FindString(input)
}

21、尝试改变 generatePassword.go 背后的逻辑,从 Go 切片中找到的密码列表里选取密码,并结合当前系统时间或日期。

要实现这个需求,可按以下步骤修改 generatePassword.go 的逻辑:

  1. 定义一个包含多个密码的 Go 切片;
  2. 获取当前系统时间或日期;
  3. 结合系统时间或日期从切片中选取密码。

以下是示例代码:

package main

import (
    "fmt"
    "math/rand"
    "os"
    "strconv"
    "time"
)

func main() {
    // 定义密码列表
    passwordList := []string{"password1", "password2", "password3", "password4", "password5"}

    // 获取当前系统时间
    currentTime := time.Now().UnixNano()

    // 使用系统时间初始化随机数种子
    rand.Seed(currentTime)

    // 从密码列表中随机选择一个密码
    randomIndex := rand.Intn(len(passwordList))
    selectedPassword := passwordList[randomIndex]

    // 将系统时间的一部分添加到所选密码中
    timePart := strconv.FormatInt(currentTime%1000, 10)
    finalPassword := selectedPassword + timePart

    fmt.Println("生成的密码: ", finalPassword)
}

在上述代码中,首先定义了一个包含多个密码的切片 passwordList ,然后获取当前系统时间并将其作为随机数种子,接着从密码列表中随机选择一个密码,最后将系统时间的一部分添加到所选密码后面,形成最终的密码。

22、对queue.go代码进行必要的修改,使其存储浮点数而非整数。

要对 queue.go 代码进行修改以存储浮点数而非整数,需要进行以下操作:

  1. 将队列中存储元素的数据类型从整数(如 int )修改为浮点数(如 float32 float64 );
  2. 检查所有与元素操作相关的函数,如入队、出队、查看队首元素等,将涉及的数据类型从整数修改为浮点数;
  3. 若代码中有初始化队列元素的部分,将初始值类型改为浮点数;
  4. 对代码中所有涉及元素比较、计算等操作的地方,确保使用浮点数的运算规则。

23、同样地,你能修改doublyLList.go的Go代码,使列表的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值