遇见go语言的第二天——字符串、时间

字符串常用的系统函数

  • 统计字符串的长度,按字节len(str),字母和数字占一个字节,汉字占3个字符
str := "hello北京"
	fmt.Println("str len = ",len(str))
  • 字符串遍历,同时处理有中文的问题 r := []rune(str)
r := []rune(str)
	for i := 0;i < len(r);i++{
		fmt.Printf("%c\n",r[i])
	}
  • 字符串转整数 n,err := strconv.Atoi(“12”)
n,err := strconv.Atoi("123")
	//nil表示无值,任何变量在没有被赋值之前的值都为nil,对于真假判断,只有nil与false、0表示假,其余均为真。
	if err != nil{
		fmt.Println("转换错误",err)
	}else {
		fmt.Println("转换的结果是",n)
	}
  • 整数转字符串
str = strconv.Itoa(123456)
	fmt.Println(str)
  • 字符串转byte
var bytes = []byte("hello")
	fmt.Printf("%v\n",bytes)
  • byte转字符串
str = string([]byte{97,98,99})
	fmt.Printf("%v\n",str)
  • 10进制转2,8,16进制
str = strconv.FormatInt(123,2)
	fmt.Printf("123对应的二进制是%v\n",str)
	str = strconv.FormatInt(123,8)
	fmt.Printf("123对应的八进制是%v\n",str)
	str = strconv.FormatInt(123,16)
	fmt.Printf("123对应的十六进制是%v\n",str)
  • 查找子串是否在指定的字符串中
s := strings.Contains("seafood","oo")
	fmt.Printf("%v\n",s)
  • 统计一个字符串有几个指定的子串
num := strings.Count("seheese","se")
fmt.Printf("%v\n",num)
  • 不区分大小写的字符串比较(==是区分大小写的)
b := strings.EqualFold("abc","ABC")
fmt.Printf("%v\n",b)
  • 返回子串在字符串第一次出现的index值,如果没有就返回-1
index := strings.Index("1234abc","abc")
fmt.Printf("%v\n",index)
  • 将指定的子串替换成另外的子串,n指希望替换几个,n = -1表示全部替换
t := strings.Replace("go go hello","go","北京",-1)
	fmt.Printf("%v\n",t)
  • 按照指定的某个字符串,为分割标识,将一个字符串拆分成字符串数组
strarr := strings.Split("hello,world,ok",",")
for i := 0;i < len(strarr);i++{
	fmt.Printf("strarr[%v]=%v\n",i,strarr[i])
}
  • 将字符串的字母进行大小写转换
str = strings.ToLower("Golang Hello")  //小写
fmt.Printf("%v\n",str)
str = strings.ToUpper("Golang Hello")  //大写
fmt.Printf("%v\n",str)
  • 将字符串左右两边的空格去掉
str = strings.TrimSpace("     go hello      ")
fmt.Println(str)
  • 将字符串左右两边指定的字符去掉
str = strings.Trim("! go hello !","!")
fmt.Println(str)
  • 判断字符串是否以指定字符串开头
b = strings.HasPrefix("http:123456","http")
fmt.Println(b)
  • 判断字符串是否以指定字符串结束
b = strings.HasSuffix("http:123456","6")
fmt.Println(b)

时间和日期相关函数

  • 获取当前时间
now := time.Now()
	fmt.Println(now)
  • 格式化日期时间
fmt.Printf("%d年%d月%d日 %d:%d:%d",now.Year(),now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second())
  • 时间常量
  • 每隔2秒打印一个数字
for i := 0;i <=10;i++{
		fmt.Println(i)
		time.Sleep(time.Second*2)
	}
  • 获取当前Unix时间戳和UnixNano时间戳
fmt.Println(now.Unix(),now.UnixNano())
  • 实例:编写一段代码来统计函数执行的时间
func test(){
	str := ""
	for i := 0;i <= 100000;i++{
		str += "hello" +strconv.Itoa(i)
	}
}
func main(){
	start := time.Now().Unix()
	test()
	end := time.Now().Unix()
	fmt.Println(end-start)
}

内置函数

func main(){
	num1 := 100
	fmt.Printf("类型%T,值%v,地址%v\n",num1,num1,&num1)
	//new:用来分配内存,主要用来分配值类型
	num2 := new(int)
	*num2 = 100
	fmt.Printf("类型%T,值%v,地址%v,指的值%v\n",num2,num2,&num2,*num2)

}

实例一:循环打印输入的月份天数

func RenYear(year int,month int)  {
	if (!((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0 ))){
		if month == 2{
			fmt.Println("28")
		}
	}
	if (year % 4 == 0 && year % 100 != 0)||(year % 400 == 0 ){
		if month == 2 {
			fmt.Println("29")
		}
	}
	switch month {
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		fmt.Println("31")
	case 4:
	case 6:
	case 9:
	case 11:
		fmt.Println("30")
	}
}
func main(){
	fmt.Print("请输入年份:")
	var year int
	fmt.Scanln(&year)
	fmt.Print("请输入月份:")
	var month int
	fmt.Scanln(&month)
	RenYear(year,month)
}

实例二:随机猜数游戏

func guess(number int) {
	rand.Seed(time.Now().UnixNano())
	num := rand.Intn((100))
	for i := 0; i <= 10; i++ {
		if number == num {
			fmt.Println("猜对啦!你真是个天才")
			break
		} else {
			if number > num {
				fmt.Printf("太大啦,你还有%d次机会\n", 10-i)
				fmt.Print("请再猜一次:")
				fmt.Scanln(&number)
			}else {
				fmt.Printf("太小啦,你还有%d次机会\n", 10-i)
				fmt.Print("请再猜一次:")
				fmt.Scanln(&number)
			}
		}
	}
}
func main(){
	fmt.Print("请在1-100中选择一个数:")
	var number int
	fmt.Scanln(&number)
	guess(number)
}

实例三:输出100以内所有素数,每行显示5个,并求和

func main()  {
	k := 0
	number := 3
	for ; number <= 100; number++ {
		count := 0
		for i := 2; i < number; i++ {
			if number%i == 0 {
				count = 1
				break
			}
		}
		if count == 0 {
			fmt.Printf("%d  ",number)
			k = k + 1
			if k == 5 {
				fmt.Print("\n")
			}
			if k == 10 {
				fmt.Print("\n")
			}
			if k == 15 {
				fmt.Print("\n")
			}
			if k == 20 {
				fmt.Print("\n")
			}
		}
	}
	sum := 0
	sum = sum + number
	fmt.Printf("\n")
	fmt.Printf("sum = %d",sum)
}

实例四:从1990年1月1日起开始执行“三天打鱼两天晒网”,如何判断在以后的某一天是“打鱼”还是“晒网”

func fish(inputyear int,inputmonth int,inputday int)  {
	year := 1990
	month := 1
	day := 1
	sum := 0
	//定义数组
	a := [13]int{0,31,28,31,30,31,30,31,31,30,31,30,31}
	for ;year < inputyear;year++{
		if (year % 4 == 0 && year % 100 != 0)||(year % 400 == 0){
			sum = sum + 366
		}else{
			sum = sum + 365
		}
	}
	n := inputmonth - month
	for i := 1;i <= n;i++{
		sum = sum + a[i]
	}
	sum = sum + (inputday - day)
	fmt.Println(sum)
	if (sum % 5 == 1)|| (sum % 5 == 2)|| (sum % 5 == 3){
		fmt.Printf("在%d年%d月%d日打鱼",inputyear,inputmonth,inputday)
	}else {
		fmt.Printf("在%d年%d月%d日晒网",inputyear,inputmonth,inputday)
	}
}
func main()  {
	fmt.Print("请输入一个年份:")
	var inputyear int
	fmt.Scanln(&inputyear)
	fmt.Print("请输入一个月份:")
	var inputmonth int
	fmt.Scanln(&inputmonth)
	fmt.Print("请输入一个天数:")
	var inputday int
	fmt.Scanln(&inputday)
	fish(inputyear,inputmonth,inputday)
}

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页