数据结构顺序串的基本操作(C/C++实现)
注意:本代码为了测试运行默认含有操作所需数据,如有需要可自己增删改相关数据
涉及基本运算流程
- 建立串 s = ‘’abcdefghijklnm’'和串s1 = ‘’xyz‘’
- 输出串s
- 输出串s的长度
- 在串s的第9个字符位插入串s1而产生串s2
- 输出串s2
- 删除串s的第2个字符开始的5个字符而产生串s2
- 输出串s2
- 将串s的第2个字符开始的第5个字符替换成串s1而产生串s2
- 输出串s2
- 提取串s的第2个字符开始的10个字符而产生串s3
- 输出串s3
- 将串s1和串s2连接起来而产生串s4
- 输出串s4
GitHub地址(包含.cpp文件和可执行程序exe)
源代码(经VS2015、devC++编译器运行通过)
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 40 /* 存储空间初始分配量 */
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */
typedef char String[MAXSIZE + 1]; /* 0号单元存放串的长度 */
/* 生成一个其值等于chars的串T */
Status StrAssign(String T, char *chars)
{
/*strlen-->检测字符串长度*/
int i;
if (strlen(chars)>MAXSIZE)
return ERROR;
else
{
/*T[0]存放串的长度*/
T[0] = strlen(chars);
for (i = 1; i <= T[0]; i++)
T[i] = *(chars + i - 1);
return OK;
}
}
/* 由串S复制得串T */
Status StrCopy(String T, String S)
{
int i;
for (i = 0; i <= S[0]; i++)
T[i] = S[i];
return OK;
}
/* 若S为空串,则返回TRUE,否则返回FALSE */
Status StrEmpty(String S)
{
if (S[0] == 0)
return TRUE;
else
return FALSE;
}
/* 初始条件: 串S和T存在 */
/* 操作结果: 若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0 */
int StrCompare(String S, String T)
{
int i;
for (i = 1; i <= S[0] && i <= T[0]; ++i)
if (S[i] != T[i])
return S[i] - T[i];
return S[0] - T[0];
}
/* 返回串的元素个数 */
int StrLength(String S)
{
return S[0];
}
/* 初始条件:串S存在。操作结果:将S清为空串 */
Status ClearString(String S)
{
S[0] = 0;/* 令串长为零 */
return OK;
}
/* 用T返回S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE */
Status Concat(String T, String S1, String S2)
{
int i;
if (S1[0] + S2[0] <=