//结构体
typedef int Status;
typedef struct
{
char *ch;
int length;
}HString;
//以串存储一个字符数组
Status StrAssign(HString &T, char *chars)
{
int i;
int len = strlen(chars);
if (!len)//初始化
{
T.ch = NULL;
T.length = 0;
}
else
{
if (!(T.ch = (char*)malloc(100 * sizeof(char))))
exit(0);
for (i = 0; i < len; i++)
T.ch[i] = chars[i];
T.length = len;
}
return 1;
}
//在串S的第 pos 个字符前插入串T
Status StrInsert(HString &S, int pos, HString T)
{
if (pos<1 || pos>S.length + 1)
return 0;
if (T.length)
{
if (!(S.ch = (char *)realloc(S.ch, (S.length + T.length) * sizeof(char))))
exit(0);
for (int i = S.length - 1; i >= pos - 1; --i)
S.ch[i + T.length] = S.ch[i];
for (int i = 0; i < T.length; i++)
S.ch[pos - 1 + i] = T.ch[i];
S.length += T.length;
}
return 1;
}
//联结
Status Concat(HString &T, HString S1, HString S2)
{
if (!(T.ch = (char *)malloc((S1.length + S2.length) * sizeof(char))))
exit(0);
for (int i = 0; i < S1.length; i++)
T.ch[i] = S1.ch[i];
for (int j = 0; j < S2.length; j++)
T.ch[S1.length + j] = S2.ch[j];
T.length = S1.length + S2.length;
return 1;
}
//用 Sub 返回串 S 的第 pos 个字符起长度为 len 的子串
Status SubString(HString &Sub, HString S, int pos, int len)
{
if (pos<1 || pos>S.length || len<0 || len>S.length - pos + 1)
return 0;
if (!len)
{
Sub.ch = NULL;
Sub.length = 0;
}
else
{
Sub.ch = (char*)malloc(len * sizeof(char));
for (int i = 0; i < len; i++)
Sub.ch[i] = S.ch[pos - 1 + i];
Sub.length = len;
}
return 1;
}
//主函数的实现
#include#include#includeint main()
{
HString String1, String2, String3, String4;
char char1[] = "Data";
char char2[] = "Struction";
StrAssign(String1, char1);
StrAssign(String2, char2);
Concat(String3, String1, String2); //联结
for (int i = 0; i < String3.length; i++)
printf("%c", String3.ch[i]);
printf("\n");
StrInsert(String1, 4, String2); //插入
for (int i = 0; i < String1.length; i++)
printf("%c", String1.ch[i]);
printf("\n");
SubString(String4, String2, 2, 5); //取子串
for (int i = 0; i < String4.length; i++)
printf("%c", String4.ch[i]);
system("pause");
return 0;
}