C语言使用定长顺序存储表示字符串
串S = ‘aafhjkxdeeshtksslshtvdfdhshtksslshtbfdmhgshtksslshtsfesrgb’
用定长顺序存储表示字符串S,然后先在pos=5的位置插入‘xdfsssg’,再在pos=10的位置删除长度为7的子串。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define maxlen 255
typedef char sstring[maxlen + 1];
int InitStr(sstring s)
{
s[0] = 0;
return 1;
}
int strLength(sstring s)
{
return s[0];
}
int strAssign(sstring s, sstring c)
{
int i;
for (i = 0; c[i] != '\0' && i + 1 < maxlen; i++)
{
s[i + 1] = c[i];
}
s[i + 1] = '\0';
s[0] = i;
return 1;
}
void clears(sstring s)
{
s[0] = 0;
}
int strEmpty(sstring s)
{
if (s[0] == 0)
return 1;
else
return 0;
}
int strInsert(sstring s, int pos, sstring T)
{
int i;
if (pos < 1 || pos > s[0] + 1)
return 0;
if (s[0] + T[0] <= maxlen)
{
for (i = s[0]; i >= pos; i--)
{
s[i + T[0]] = s[i];
}
for (i = pos; i < pos + T[0]; i++)
{
s[i] = T[i - pos + 1];
}
s[0] += T[0];
s[s[0] + 1] = '\0';
return 1;
}
else
{
for (i = maxlen; i >= pos + T[0]; i--)
s[i] = s[i - T[0]];
for (i = pos; i < pos + T[0] && i <= maxlen; i++)
s[i] = T[i - pos + 1];
s[0] = maxlen;
return 0;
}
}
int strDelete(sstring s, int pos, int len)
{
int i;
if (pos < 1 || pos > s[0] - len + 1 || len < 0)
return 0;
for (i = pos + len; i <= s[0]; i++)
{
s[i - len] = s[i];
}
s[0] -= len;
s[s[0] + 1] = '\0';
return 1;
}
int main()
{
sstring s, in;
InitStr(s);
InitStr(in);
strAssign(s, "aafhjkxdeeshtksslshtvdfdhshtksslshtbfdmhgshtksslshtsfesrgb");
strAssign(in, "xdfsssg");
printf("%d %s\n", s[0], s + 1);
strInsert(s, 5, in);
printf("%d %s\n", s[0], s + 1);
strDelete(s, 10, 7);
printf("%d %s\n", s[0], s + 1);
clears(s);
clears(in);
return 0;
}