#include <stdio.h>
#include<stdlib.h>
#define Error 0
#define Ok 1
#define MAXSIZE 256
typedef int Status;
typedef struct {
char str[MAXSIZE];
int length;
}SqString; //定义串的结构体,用一个数组存储串
Status StrAssign(SqString &T,char chars[]){ //生成一个值等于chars的串T
int i,j;
T.length=0;
i=sizeof(chars)/sizeof(char);
for(j=0;j<i;j++)
T.str[j]=chars[j]; //将一个数组中的数据传递到一个串中
T.length=i;
return Ok;
}
Status StrLength(SqString T) //获取串T的长度
{
return T.length;
}
Status StrCope(SqString &T,SqString S) //将一个串中的值拷贝到另一个串中
{
int i;
for(i=0;i<S.length;i++)
T.str[i]=S.str[i];
T.length=S.length;
return Ok;
}
Status StrCompare(SqString s1,SqString s2) //将两个串的长度进行比较
{
if(s1.length>s2.length)
printf("串一大于串二\n");
else
if(s1.length==s2.length)
printf("串一等于串二\n");
else
printf("串一小于串二\n");
return Ok;
}
Status Concat(SqString &T,SqString s1,SqString s2) //将两个串合并
{
int i,j;
if(s1.length+s2.length>MAXSIZE)
return Error;
for(i=0;i<s1.length;i++)
T.str[i]=s1.str[i];
for(j=0;j<(s2.length);j++)
T.str[s1.length+j]=s2.str[j];
T.length=s1.length+s2.length;
return Ok;
}
Status SubString(SqString &Sub,SqString s,int pos,int len) //从一个串中截取一个子串
{
int i,j;
if((pos<1||pos>s.length)&&(len<0||len>s.length-pos+1))
return Error;
for(i=pos,j=0;j<len;i++,j++)
Sub.str[j]=s.str[i-1];
Sub.length=len;
return Ok;
}
void print(SqString T) //输出串
{
int i;
for(i=0;i<T.length;i++)
printf("%c",T.str[i]);
printf("\n");
}
void main()
{
SqString S,T,T2,T3,T4;
int pos,len;
char chars[]={'a','b','c','d'};
char charss[]={'e','r','t','y'};
StrAssign(T2,charss);
StrAssign(T,chars);
printf("串一为:");
print(T);
printf("串二为:");
print(T2);
StrCope(S,T);
printf("复制串一后的串为:");
print(S);
printf("判断串一与串二的长度大小\n");
StrCompare(T,T2);
printf("将串一与串二连接为:");
Concat(T3,T,T2);
print(T3);
printf("输入从合并后的串中在第几个位置截取几位作为子串");
scanf("%d,%d",&pos,&len);
SubString(T4,T3,pos,len);
printf("子串为:");
print(T4);
getchar();
getchar();
}
串的定长顺序存储表示,就是用的普通的数组来存储串
这个是个简单的表示,没有用书上的算法,书上的还要考虑截断什么的,老师说那个没有必要,所以就按照这个写了