[go学习笔记.第七章.数组和切片] 5.slice和string

1.string底层是一个byte数组,因此string也可以进行切片处理

	//string底层是一个byte数组,故string也可以进行切片处理
	str := "hello@atbaidu"
	//使用切片获取atbaidu
	slice := str[6:]
	fmt.Printf("slice=%v\n", slice)

2.string和切片在内存中的形式,以"abcd"画出内存示意图 

3. string是不可变的,不能通过str[0] = 'z'方式来修改字符串


	//string是不可变的,不能通过str[0] = 'z'方式来修改字符串
    str[0] = 'z' //编译不通过,报错:string是不可变的

4.如果需要修改字符串,可以先将string => []byte,或者[]rune => 修改 => 重写转成string 

    // 如果需要修改字符串,可以先将string => []byte,或者[]rune => 修改 => 重写转成string
	//"hello@atbaidu" => 改成 "zello@atbaidu"
	arr1 := []byte(str)	//先将str转成[]byte切片类型
	arr1[0] ='z'	//切片类型就可以进行修改了
	str = string(arr1)	//再把切片转成string类型
	fmt.Printf("str=%v\n", str)	//str=zello@atbaidu

	//细节讨论:	转成[]byte后,可以处理英文和数字,但是不能处理中文
	//原因: []byte 字节来处理,而一个汉字占3个字节,所以会出现乱码
	// arr2 := []yte(str)
	// arr2[0] ='北'	//错误: 一个byte的范围为255,而 '北'是21271,越界了
	// 解决办法: 将string转成[]rune即可,因为[]rune是按字符处理,兼容汉字
	arr2 := []rune(str)
	arr2[0] ='北'
	str = string(arr2)
	fmt.Printf("str=%v\n", str)	//str=北ello@atbaidu

 练习:

        1.可以接收一个n int
        2.能够将斐波那契的数列放到切片中
        3.提示:斐波那契的数列形式:
            arr[0] = 1, arr[1]= 1, arr[2] = 2, arr[3] = 3, arr[4] = 5

package main

import (
	"fmt"
)

func fbn (n int) []uint64 {
	//声明一个切片,大小n
	fbnslice := make([]uint64, n)
	//第一个,第二个数的斐波那契数都为1
	fbnslice[0] = 1
	fbnslice[1] = 1
	//for循环来存放斐波那契数列
	for i := 2; i < n; i++ {
		fbnslice[i] = fbnslice[i - 1]  + fbnslice[i -2]
	}
	return fbnslice
}
func main(){
	/**
		1.可以接收一个n int
		2.能够将斐波那契的数列放到切片中
		3.提示:斐波那契的数列形式:
			arr[0] = 1, arr[1]= 1, arr[2] = 2, arr[3] = 3, arr[4] = 5
		思路:
		1.声明一个函数 fbn(n int) ([]uint64)
		2.编写fbn(n int) 进行for循环来存放斐波那契数列,注意其中的特殊值arr[0] = 1, arr[1]= 1
	*/
	slice := fbn(5)
	fmt.Printf("slice=%v\n", slice)
}

 [上一节][go学习笔记.第七章.数组和切片] 4.切片的三种使用方式以及注意事项和使用细节

[下一节][go学习笔记.第八章.排序和查找] 1.排序,查找的基本介绍 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值