#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize];
int length;
}SqString;
//串赋值
void Assign(SqString& s, char str[])
{
int i = 0;
while (str[i] != '\0')
{
s.data[i] = str[i];
i++;
}
s.length = i;
}
//销毁串
void DestroyStr(SqString s)
{
}
//串复制
void StrCopy(SqString& s, SqString t)
{
int i;
for (i = 0; i < t.length; i++)
{
s.data[i] = t.data[i];
}
s.length = t.length;
}
//求串长度
int StrLength(SqString s)
{
return s.length;
}
//判断串相等
int StrEqual(SqString s,SqString t)
{
int i;
if(s.length != t.length)
return 0;
else
for (i = 0; i < s.length; i++)
{
if (s.data[i] != t.data[i])
return 0;
}
return 1;
}
//串连接
SqString Concat(SqString s, SqString t)
{
SqString r;
int i, j;
for (i = 0; i < s.length; i++)
{
r.data[i] = s.data[i];
}
for (j = 0; j < t.length; j++)
{
r.data[s.length + j] = t.data[j];
}
r.length = i + j;
return r;
}
//求子串运算
SqString SubStr(SqString s, int i, int j)
{
SqString t;
int k;
if (i<1 || i>s.length || j<1 || i + j>s.length + 1)
{
t.length = 0;
}
else {
for (k = i - 1; k < i + j - 1; k++)
{
t.data[k - i + 1] = s.data[k];
}
t.length = j;
}
return t;
}
//查找字串的位置运算
int Index(SqString s, SqString t)
{
int i = 0, j = 0;
while (i < s.length && j < t.length)
{
if (s.data[i] == t.data[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}
}
if (j >= t.length)
return i - t.length + 1;
else
return 0;
}
//子串插入运算
int InStr(SqString& s, int i, SqString t)
{
int j;
if (i<1 || i>s.length + 1)
{
return 0;
}
else
{
for (j = s.length - 1; j >= i - 1; j--)
s.data[j + t.length] = s.data[j];
for (j = 0; j < t.length; j++)
s.data[i + j - 1] = t.data[j];
s.length = s.length + t.length;
return 1;
}
}
//子串删除
int DelStr(SqString& s, int i, int j)
{
int k;
if (i<1 || i>s.length || j<1 || i + j>s.length + 1)
{
return 0;
}
else
{
for (k = i + j - 1; k < s.length; k++)
{
s.data[k - j] = s.data[k];
}
s.length = s.length - j;
return 1;
}
}
//子串替换
SqString RepStrAll(SqString s, SqString s1, SqString s2)
{
int i;
i = Index(s, s1);
while (i > 0)
{
DelStr(s, i, s1.length);
InStr(s, i, s2);
i = Index(s, s1);
}
return s;
}
//输出串运算算法
void DispStr(SqString s)
{
int i;
for (i = 0; i < s.length; i++)
{
printf("%c ", s.data[i]);
}
printf("\n");
}
int main()
{
SqString s1, s2, s3, s4, s5, s6;
char a[] = "abcd";
Assign(s1,a );
printf("s1:"); DispStr(s1);
printf("长度:%d\n",StrLength(s1));
StrCopy(s2, s1);
printf("s2:"); DispStr(s2);
printf("长度:%d\n", StrLength(s2));
printf("s1和s2 %s\n", (StrEqual(s1, s2) == 1 ? "相同" : "不相同"));
char b[5] = "1234";
Assign(s3,b );
printf("s3:"); DispStr(s3);
printf("长度:%d\n", StrLength(s3));
printf("s1和s3 拼接");
s4 = Concat(s1, s3);
DispStr(s4);
return 0;
}
串——顺序结构
最新推荐文章于 2024-08-25 06:11:42 发布