📄 basicoperate.h
字号:
//基本操作
PBigStr create_nullstr(void)//创建空串(实质是创建一个空结点)
{
PBigStr pstr;
int i;
pstr=(PBigStr)malloc(sizeof(struct BigStr));
if (pstr==NULL)
printf("Out of space!\n");
else
{//初始化空串
pstr->pc=(char *)malloc(81*sizeof(char));//分配81个字符空间,留出一个位置存放\0结束符,免得处理中出现问题
for (i=0;i<81;i++)
pstr->pc[i]='\0';
pstr->link=NULL;
}
return pstr;
}
PBigStr locate_line(int n,PBigStr pstr)//定位到第n-1行
{
PBigStr node=pstr;
int i=1;
while (node!=NULL&&i<n-1)
{
node=node->link;
i++;
}
if (node==NULL)
return NULL;
return node;
}
int insert_char(PBigStr pstr,char c)//从表中的最后插入一个字符
{
PBigStr node=pstr;
int i;
if (pstr==NULL)
{
printf("Null String!\n");
return 0;
}
else
{
while (node->link!=NULL)//定位到最后一个结点
node=node->link;
for (i=0;i<80;i++)
if (node->pc[i]=='\0')
break;//定位到最后一个字符
if (c=='\n')//最后为换行的时候创建新结点
{
node->link=create_nullstr();
if (node->link==NULL)
return 0;
else
return 1;
}
if (i==80)//最后没空间存放字符的时候创建新结点
{
node->link=create_nullstr();
if (node->link==NULL)
return 0;
else
{
node->link->pc[0]=c;
node->link->pc[1]='\0';
return 1;
}
}
else
{
node->pc[i]=c;//最后还有空间存放的时候直接插入
return 1;
}
}
}
PBigStr find_line(char *str,PBigStr node)//判断某行是否出现了特定字符串str,是的话返回原结点,否的话返回空结点
{
int i,j,n,m;
i=0;
j=0;
n=strlen(str);
m=strlen(node->pc);
while (i<n&&j<m)
if (str[i]==node->pc[j])
{
i++;
j++;
}
else
{
j=j-i+1;
i=0;
}
if (i>=n)
return node;
else
return NULL;
}
int index_line(char *big,char *small)//在big字符串中查找small字符串首次出现的首字符下标,失败则返回-1(有回溯)
{
int i=0, j=0;
int p=strlen(small);
int t=strlen(big);
while (i<p&&j<t)
if (small[i]==big[j])
{
i++;
j++;
}
else
{
j=j-i+1;
i=0;
}
if (i>=p)
return(j-p);
else
return -1;
}
char *back_insert_char(char *str,char c)//在字符串str的最后插入字符c
{
int n=strlen(str);
str=(char *)realloc(str,(n+2)*sizeof(char));//重新分配空间
str[n]=c;
str[n+1]='\0';//加入'\0'结束符保证字符串的合法性
return str;
}
PBigStr insert_str(char *str,PBigStr node)//在表的最后插入字符串str
{
int i=0;
for (i=0;str[i]!='\0';i++)
insert_char(node,str[i]);
return node;
}
int *makenext(char *str)//计算next数组
{
int i,k;
int n=strlen(str);
int *next=(int *)malloc(n*sizeof(int));
k=-1;
i=0;
next[0]=-1;
while (i<(n-1))
{
while (k>=0&&str[i]!=str[k])
k=next[k];
i++;
k++;
if (str[i]==str[k])
next[i]=next[k];
else
next[i]=k;
}
return next;
}
int match(char *big,char *small)//无回溯的查找
{
int i,j;
int p=strlen(small);
int t=strlen(big);
int *next;
next=makenext(small);
i=0;
j=0;
while (i<p&&j<t)
if (i==-1||small[i]==big[j])
{
i++;
j++;
}
else
i=next[i];
if (i>=p)
return (j-p);
else
return -1;
}
int calculate_line(PBigStr pstr)//计算总行数
{
int n=1;
PBigStr node;
node=pstr;
while (node!=NULL)
{
if (node->link==NULL)
{
n++;
break;
}
else
{
n++;
node=node->link;
}
}
return n;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -