数据结构——定长串操作
首先我们必须了解的定长串的相关名词:
串 长:是指字符串的长度,如:“abcde”长度为5,“PI”长度为2
串相等:两个字符串的长度和内容均相等,如:“abcde”和“abcde”
空格串:字符串由一个或多个空格组成,空格串不是空串,空格串有长度,如:“ ”
空 串:字符串长度为零,如:“”
子 串:一个串的某一部分,如:“abcde”的“a”,“bc”,“bcd”等都是子串
[cpp]
//-----头文件------
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//------宏定义------
#define MAXSTRLEN 255
#define OVERFLOW -2
#define TURE 1
#define ERROR 0
//-------类型名替换--------
typedef unsigned char SString[MAXSTRLEN+1];
typedef int Bool;
//-----函数列表-----
Bool StrAssign(SString *T,char *s);
Bool StrCopy(SString *T,SString S);
Bool StrEmpty(SString S);
Bool ClearString(SString *S);
int StrCompare(SString S,SString T);
int StrLength(SString S);
Bool Concat(SString *T,SString S1,SString S2);
Bool SubString(SString *Sub,SString S,int pos,int len);
Bool StrInsert(SString *S,int pos,SString T);
Bool StrDelete(SString *S,int pos,int len);
Bool Replace(SString *S,SString T,SString V);
Bool DestroyString(SString *S);
int Index(SString S,SString T,int pos);
void StrOutput(SString S);
//-----主函数做替换测试------
int main()
{
SString t,*T=&t,s,*S=&s,s0,*S0=&s0;
int n;
//串初始化
StrAssign(T,"abcdedehdeklmdepqded");
StrAssign(S0,"de");
StrAssign(S,"$$$");
//串拷贝
StrCopy(T, s0);
if(StrEmpty(t))
{
printf("yes is empty!\n");
}
else
{
printf("non empty!\n");
}
//清空串
//ClearString(T);
if(StrEmpty(t))
{
printf("yes is empty!\n");
}
else
{
printf("non empty!\n");
}
//判断两个串是否相等
n = StrCompare(t, s0);
printf("The reasult is: %d\n", n);
//获取串长
printf("The length is:%d\n", StrLength(t));
//串连接
Concat(S, t, s0);
StrOutput(s);
//获取指定字串
SubString(S, t, 5, 5);
StrOutput(s);
//插入字串
StrInsert(T, 1, s0);
StrOutput(t);
//删除字串
StrDelete(T, 5, 5);
StrOutput(*T);
//串替换
Replace(T,s0,s);
StrOutput(*T);
return 0;
}
//------生成一个其值等于字符串常量的串T------
Bool StrAssign(SString *T, char *s)
{
int i;
for(i=0; '\0'!=*s; s++,i++)
{
(*T)[i+1] = *s;
}
(*T)[0] = i; //串第一个地址存放串长
return TURE;
}
//------复制串S到串T中,生成一个其值等于串S的串T------
Bool StrCopy(SString *T, SString S)
{
int i;
for(i=1; i<=S[0]; i++)
{
(*T)[i] = S[i];
}
(*T)[0] = S[0];
return TURE;
}
//-----判断是否为空串,为空返回TURE,非空返回ERROR------
Bool StrEmpty(SString S)
{
return S[0]==0?TURE:ERROR;
}
//-----比较两个串的大小------
//串S大于串T返回1,小于返回-1,等于返回0,错误返回-2
int StrCompare(SString S,SString T)
{
int i;
if(0==S[0] || 0==T[0])
{
return -2; //不能返回ERROR,因为ERROR=0
}
for(i=1; i<=S[0]&&i<=T[0]; i++)
{
if(S[i]>T[i])
{
return 1;
}
else if(S[i]<T[i])
{
return -1;
}
else
{
continue;
}
}
if(S[0]==T[0])
{
return 0;
}