1.串的基本概念
串:由零个或多个字符组成的有限序列。
子串:一个串中任意个连续字符组成的序列。
如串 “abcde”,的子串有 “a”、“b”、“ab”、“abc”、“abcde” 等。
串和线性表一样,也有顺序存储结构(顺序串)和链式存储结构(链串)。
2.顺序串
顺序串存储方式有:非紧缩格式,紧缩格式。
一个字节可以表示一个字符。由于计算机内存是按字编址的,即以字为存储单位,一个存储单元指的是一个字。而一个字可能包含多个字节,不同的计算机系统的字长是不同的,常见的有8位、16位、32位、64位等,字长越长,计算机一次处理的信息位就越多,精度就越高,字长是计算机性能的一个重要指标。
一个32位的CPU字长是4个字节。下图是32位的CPU的机器顺序串的存储方式。
串的紧缩格式节省空间,但处理单个字符不方便,运行效率低,因为要花费时间从同一个字中分离出字符;非紧缩格式则相反。因此对串的操作主要采用非紧缩格式。对于非紧缩格式的顺序串类型声明格式如下
typedef struct
{
char data[MaxSize]; //存放串字符
int length; //存放串长
}SqString;
串的实现
#include<stdlib.h>
#include<stdio.h>
//定义串的类型
#define MaxSize 50
typedef struct
{
char data[MaxSize]; //存放串字符
int length; //存放串长
}SqString;
//生成串
void StrAssign(SqString &s, char cstr[]) //s为引用型参数
{
int i;
for (i = 0; cstr[i] != '\0'; i++)
s.data[i] = cstr[i];
s.length = i; //设置串s长度
}
//输出串的值
void DispStr(SqString s)
{
int i;
if (s.length > 0)
{
for (i = 0; i < s.length; i++)
printf("%c", s.data[i]);