串(string)的基本用法

2018/3/22

数据结构

1.串(string)

1.概念:由n个字符所组成的有限数列

2.串是一种特殊的线性表,但是也有着不同之处,串的操作对象只能是字符,而且线性表一次只能操作一个数,但是串一次可以操作多个字符

2.动态数组的应用

注:这里是采用动态数组的方法来分配空间,即:在空间不够的时候,继续动态分配空间(realloc(size,number))

 
  
#include
#include
#include
#include
typedef struct
{
char *str;//字符串内容
int length;//字符串长度
int maxlength;//最长长度
}DString;
//1.新建字符串
void initString(DString *S,int max, char *string)//参数表列:主字符串,字符串长度,字符串内容
{
int i;
S->str = (char*)malloc(sizeof(char)*max);//申请动态空间
S->maxlength = max;//申请最大值(可变)
S->length =strlen(string);//使用标准函数来计算键入字符串的长度
for (i = 0; i < S->length; i++)//循环输入
{
S->str[i] = string[i];
}
}
//2.插入子串(含动态分配空间)
int insert_string(DString *S, int pos, DString T)//在pos的地方插入子串T
{
int i;
char *p;
//判断特殊情况
if (pos<0 || pos>S->length)
{
printf("插入位置错误\n");
return 0;
}
//!!!动态分配
else
{
if (S->length + T.length > S->maxlength)//如果数组的长度超出了默认长度
{
p =(char *)realloc(S->str, (S->length + T.length)*sizeof(char));
//realloc(p,size),表示重新给p分配一个size大小的空间
if (p == NULL)
{
printf("空间不足\n");
return 0;
}
}
//循环给值
for (i = S->length - 1; i >= pos; i--)
{
S->str[i + T.length] = S->str[i];//数据移位
}
for (i = 0; i < T.length; i++)
{
S->str[pos + i] = T.str[i];//赋子串值入源串
}
S->length = S->length + T.length;
return 1;
}
}
//3.删除指定位置子串
int delete_string(DString *S, int pos,int len)//参数表列:所删除的串,删除的位置,删除的位数
{
int i;
//判断特殊情况
if (S->length <= 0)
{
printf("无数可删除\n");
return 0;
}
else if (pos < 0 || len<0 || pos + len>S->length)//pos+length为总长度
{
printf("参数选择错误\n");
return 0;
}
else
{
for (i = pos + len; i <= S->length - 1; i++)
{
S->str[i - len] = S->str[i];
S->length = S->length - len;
return 1;
}
}
}
//4.取子串
int catch_string(DString *S, int pos, int len, DString *T)//参数表列:主字符串,所取字符串的头,所取字符串的尾,返回子串
{
int i;
if (pos < 0 || len<0 || pos + len>S->length)//pos+length为总长度
{
printf("参数选择错误\n");
return 0;
}
else
{
for (i = 0; i < len; i++)
{
T->str[i] = S->str[pos + i];//取得子串
T->length = len;
return 1;
}
printf("\n取得子串为\n");
for (i = 0; i < T->length; i++)
{
printf("%2c", T->str[i]);
}
}
}
//5.撤销字符串
void destroy(DString *S)//释放指针,将长度置为0
{
free(S->str);//释放指针
S->maxlength = 0;
S->length = 0;
printf("\n撤销完成\n");
}
//6.BF算法
int BFindex(DString S,int start,DString T)//参数表列:查找从start开始的子串在S中的位置
{
    int i,j,v;
    i=start;
    j=0;
    while(i


你可能感兴趣的:(串(string)的基本用法)