• 文件操作4


    统计不同类型的字符个数

    统计英文、数字、空格和其它字符数量

    说明:统计一个文件中含有的英文、数字、空格及其它字符数量。

    package main
    import (
      "fmt"
      "io"
      "bufio"
      "os"
    )

    //定义一个结构体,用于保存统计结果
    type CharCount struct {
      ChCount int   //记录英文个数
      NumCount int   //记录数字的个数
      SpaceCount int   //记录空格的个数
      OtherCount int   //记录其它字符的个数
    }

    func main() {

      //思路:打开一个文件,创建一个带缓存的Reader
      //每读取一行,就去统计该行有多少个 英文、数字、空格和其它字符
      //然后将结果保存到一个结构体
      fileName := "e:/重要名字.txt"
      file, err := os.Open(fileName)
      if err != nil {
        fmt.Printf("open file err=%v ", err)
        return
      }
      defer file.Close()
      //定义个chCount实例
      var count CharCount
      //创建一个Reader
      reader := bufio.NewReader(file)

      //开始循环的读取fileName的内容
      for {
        str, err := reader.ReadString(' ')
        if err == io.EOF {
          break
        }

        //为了兼容中文字符,可以将 str 转成 []rune
        str1 := []rune(str)
        //遍历 str 进行统计
        for _, v := range str1 {
          switch {
            case v >= 'a' && v <= 'z':
              fallthrough //穿透
            case v >= 'A' && v <= 'Z':
              count.ChCount++
            case v == ' ' || v == ' ':
              count.SpaceCount++
            case v >= '0' && v <= '9':
              count.NumCount++
            default:
              count.OtherCount++
          }
        }
      }

      //输出统计的结果看看是否正确
      fmt.Printf("字符的个数为=%v 数字的个数为=%v 空格的个数为=%v 其它字符个数为=%v",
      count.ChCount, count.NumCount, count.SpaceCount, count.OtherCount)
    }

    命令行参数基本使用


    看一个需求:

    我们希望能够获取到命令行输入的各种参数,该如何处理? 如图:=》命令行参数

    基本介绍:

    os.Args 是一个string的切片,用来存储所有的命令行参数


    应用案例:

    请编写一段代码,可以获取命令行各个参数

    package main
    import (
      "fmt"
      "os"
    )

    func main() {

      fmt.Println("命令行的参数有", len(os.Args))
      //遍历os.Args切片,就可以得到所有的命令行输入参数值
      for i, v := range os.Args {
        fmt.Printf("args[%v]=%v ", i, v)
      }
    }

    flag包解析命令行参数

    说明:前面的方式是比较原生的方式,对解析参数不是特别的方便,特别是带有指定参数形式的命令行。

    比如:cmd>main.exe -f c:/aaa.txt -p 200 -u root 这样的形式命令行,go设计者给我们提供了flag包,可以方便的解析命令行参数,而且参数顺序可以随意

    请编写一段代码,可以获取命令行各个参数。

    代码演示:

    package main
    import (
      "fmt"
      "flag"
    )

    func main() {

      //定义几个变量,用于接收命令行输入的参数值
      var user string
      var pwd string
      var host string
      var port int

      //&user 就是接收用户命令行中输入的 -u 后面的参数值
      //"u",就是 -u 指定参数
      //"",默认值
      //"用户名,默认为空" 说明
      flag.StringVar(&user, "u", "", "用户名,默认为空")
      flag.StringVar(&pwd, "pwd", "", "密码,默认为空")
      flag.StringVar(&host, "h", "localhost", "密码,默认为localhost")
      flag.IntVar(&port, "port", 3306, "端口号,默认为3306")

      //这里有一个非常重要的操作,转换,必须调用该方法
      flag.Parse()

      //输出结果
      fmt.Printf("user=%v pwd=%v host=%v port=%v",
      user, pwd, host, port)
    }

    输出的结果:

  • 相关阅读:
    02方法 课后作业1
    HDU 1518
    POJ 2406
    HDU 1953
    HDU 1272
    POJ -- 3842
    POJ -- 3233 求“等比矩阵”前n(n <=10^9)项和
    POJ ---3070 (矩阵乘法求Fibonacci 数列)
    POJ --- 3613 (K步最短路+矩阵快速幂+floyd)
    POJ --- 2918 求解数独
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11552189.html
Copyright © 2020-2023  润新知