【数据结构】【数组与字符串】数组和字符串的常用操作以及常用技巧


字符串的常用操作

字符串转化为 字符数组 arrStrBytes := []byte(str)
字符数组转化为字符串 str :=string(arrStrBytes)
字符串截取 字符串截取和数组的截取是一样的 arrByte[low:high]

  • low表示起点,是包含这个字符的
  • hight 表示终点,是不包含这个字符的

字符串切割转化为数组 []string =strings.split(str,"分隔符 ")返回字符串数组
字符串到整型 int int64 int32 的转化 strconv.atoi(str,10) atoi 是strconv.parseInfo的精简版本
整型到字符串的转化 strconf.atoi(i int) strconf.FormatInt(i int64,int)
字符串的定义

  • var str = “hello word” (编译器会推导类型)
  • str :=“hello word”
  • var str int = 100

字符串的遍历 和 数组的遍历是一样的 str[i]
字符串的修改,a="hello word " go语言的字符串是无法直接修改字符的,只能通过重新构造然后赋值给原来字符串实现

  • arrByte:=[]byte(str) arrByte[0] = w str:=string(arrByte)
  • 字符串不可变和java是一样的,c++的字符串是可变的,字符串不可变有很多好处,如天生线程安全,大家使用的都是只读对象,无须加锁;再者,方便内存共享,而不必使用写时复制(Copy On Write)等技术;字符串 hash 值也只需要制作一份。所以说,代码中实际修改的是 []byte,[]byte 在 Go 语言中是可变的,本身就是一个切片

字符串的拼接

  • 用+进行链接
  • 用类似于stringBuilder机制来进行链接 var stringBuilder bytes.Buffer stringBuilder.WriteString(“hello”) str:=stringBuilder.string()
数组的常用操作

数组和切片

  • 数据是固定长度的 ,因此是固定长度,所以go语言中很少用数组,大多数用切片

数组的定义

  • 数组的定义1 var a [3]int 默认值3个的初始值都为0
  • 数组的定义2 a :=[…]int{1,2,3} 长度根据初始化值的个数来计算
  • 数组的定义3 var a[3]int=[3]int{1,2,3} var a =[3]int{1,2,3} a:=[3]int{1,2,3}

切片的定义

  • 数组的一个连续片段的引用,没有固定的长度
  • 从数组或切片中生成切片 a := a[0:2]; a[0:0] 重置切片 a[ : ]原来的切片
  • 直接声明切片 var a []int 只声明未初始化不能使用;因为是nil的(和数组有区别)
  • var b []int = []int{1,2,3} var c = []int{11,22,33} d :=[]int{111,222,333}
  • make构造切片 b := make([]int, 2, 10)

数组的常用操作

  • 使用append来为切片添加元素
    **a = append(a, 1) // 追加1个元素
    **a = append(a, 1, 2, 3) // 追加多个元素, 手写解包方式
    **a = append(a, []int{1,2,3}…) // 追加一个切片, 切片需要解包
  • 使用append从头部添加元素
    ** a = append([]int{0},a…) //在a头部添加一个元素
    ** a = append([]int{1,2,3),a…) //在a的头部添加一个切片
  • 使用append进行链式操作 达到中间插入的目的
    ** a = append(a[:i], append([]int{x}, a[i:]…)…) // 在第i个位置插入x
    **a = append(a[:i], append([]int{1,2,3}, a[i:]…)…) // 在第i个位置插入切片
切片的函数传递是直接传还是传带&符号的?

不说原理了,直接说结论,原理请自行百度或者google;如果函数中使用了切片的append方法,则需要传递地址,也就是带&符号的,接收以*指针形式接收。如果函数中对切片的使用未使用append方法,则直接传递就可以

算法中数组的一些奇淫技巧
  1. 双指针遍历,一个在开始位置,一个在结束位置;一般适用于只遍历数组一般就能得到结果
// 注意:这里end是length-1
start :=0
end := len(arr)-1
for end>start{
	// 一般这里是交换的一些操作
	start++
	end--
}
  1. 基于1的,大多数给的并不是数组的开始位置和结束位置;给的是数组中的一个start 和 end位置
这里的[start,end)是一个半开半闭的区间
middle :=(start+end)/2
for :=0;i<middle;i++{
	// 这里一般是交换
	end--
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 绪论 一、基本内容 数据、数据元素、数据对象、数据结构、存储结构和数据类型等概念术语的确定含义;抽象数据类型的定义、表示和实现方法;描述算法的类C语言;算法设计的基本要求以及从时间和空间角度分析算法的方法。 二、学习要点 1.熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。分清哪些是逻辑结构的性质,哪些是存储结构的性质。 2.了解抽象数据类型的定义、表示和实现方法。 3.熟悉类C语言的书写规范,特别要注意值调用和引用调用的区别,输入、输出的方式以及错误处理方式。 4.理解算法五个要素的确切含义:①动态有穷性(能执行结束);②确定性(对于相同的输入执行相同的路径);③有输入;④有输出;⑤可行性(用以描述算法的操作都是足够基本的)。 5.掌握计算语句频度和估算算法时间复杂度的方法。 三、基础知识题 1.1 简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 答:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示(又称映像)。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。程序设计语言中的数据类型是一个值的集合和定义在这个值集上的一组操作的总称。而抽象数据类型是指一个数学模型以及定义在该模型上的一组操作

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值