数据结构与算法##4.字符串

数据结构与算法##4.字符串

一、基本概念

元素为字符的线性表
空串不等于空格串
通常以串的整体作为操作对象
线性表的存储方法同样适用于字符串
应根据不同情况选择合适的存储表示

字符:组成字符串的基本单位 char
编码方式:ASCII, GB, CJK, UNICODE
编码表一般遵循约定俗成的偏序编码规则
字符偏序:根据字符的自然含义,某些字符间两两可以比较次序

字符串数据类型:

  • 根据语言不同:简单类型和复杂类型
  • 字符串常数和字符串变量

子串的定义
空串是任意串的子串
任意串都是其自身的子串
真子串:非空且不为自身的子串

基本运算
#include <string.h>

  • 求串长 int strlen(char *s);
  • 串复制 char *strcpy(char *s1, char *s2);
  • 串拼接 char *strcat(char *s1, char *s2);
  • 串比较 int strcmp(char *s1, char *s2);
  • 定位 char *strchr(char *s, char c);
  • 右定位 char *strrchr(char *s, char c);
  • 求子串 char *strstr(const char *str1, const char *str2);

#include <string>

  • 子串 substr()
  • 拷贝 copy()
  • 交换 swap()
  • 赋值 assign(), =
  • 插入 insert(), append(), +=
  • 拼接 +
  • 查询 find(), rfind()
  • 替换 replace()
  • 清除 clear()
  • 统计 size()/legth(), max_size()

得到字符串中的字符:
重载 []

二、存储结构

1.顺序存储

对串长变化不大的字符串:

  • 用s[0]作为记录串长的存储单元 <=256
  • 为存储串长开辟新的存储地方 串最大长度一般静态给定,不是动态申请
  • 末尾加\0

2.模式匹配

在大文本中定位(查找)特定的模式
朴素模式匹配:一次移动一格
在这里插入图片描述
O(mn)

KMP算法
k值仅依赖于模式P本身,而与目标对象T无关
特征向量N(next数组)
在这里插入图片描述
在s[k]停住了就让s[k]和p[next[j]]对应上
O(m+n)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值