#include<stdio.h>
#include<stdlib.h>
#include"fix_len_seq_str.h"
/****StrAssign****/
Bool StrAssign(char *Str ,const char *pc)
{
int len=0;
int i;
char *temp;
temp=pc;
while(*temp!='\0')
{
temp++;
len++;
}
if(len>MAX)
{
printf("Too long string!\n");
return False;
}
else
{
*Str=len;
for(i=0;i<len;i++)
*(Str+i+1)=*(pc+i);
return True;
}
}
/****StrCopy****/
Bool StrCopy(char *Str,char *pc)
{
int i=1;
int len=*pc;
if(pc==NULL)
{
printf("String doesn't exit!\n");
return False;
}
while(i<=len)
{
*(Str+i)=*(pc+i);
i++;
}
*Str=len;
return True;
}
/****StrEmpty****/
Bool StrEmpty(char *Str)
{
if(*Str==0)
return True;
else
return False;
}
/****StrCompare****/
int StrCompare(char *Str,char *Str1)
{
int i,len,len1;
i=1;
len=*Str;
len1=*Str1;
if(len==len1)
{
while(i<=len)
{
if(*(Str+i)==*(Str1+i))
i++;
else if(*(Str+i)>*(Str1+i))
return 1;
else
return -1;
}
return 0;
}
else if(len>len1)
return 1;
else
return -1;
}
/****StrLength****/
int StrLength(char *Str)
{
return *Str;
}
/****ClearStr****/
void ClearSrt(char *Str)
{
int len=*Str;
int i;
for(i=1;i<=len;i++)
*(Str+i)='\0';
*Str=0;
}
/****ConCat****/
Bool ConCat(char *Str,char *s1,char *s2)
{
int len1,len2,cpy_len,i;
if(s1==NULL||s2==NULL)
return False;
len1=*s1;
len2=*s2;
if(len1==MAX)
{
for(i=1;i<=len1;i++)
{
*(Str+i)=*(s1+i);
}
*Str=MAX;
return True;
}
else if(len1<MAX&&len1+len2>MAX)
{
for(i=1;i<=len1;i++)
{
*(Str+i)=*(s1+i);
}
cpy_len=MAX-len1;
for(i=1;i<=cpy_len;i++)
{
*(Str+len1+i)=*(s2+i);
}
*Str=MAX;
return True;
}
else if(len1+len2<=MAX)
{
for(i=1;i<=len1;i++)
*(Str+i)=*(s1+i);
for(i=1;i<=len2;i++)
*(Str+len1+i)=*(s2+i);
*Str=len1+len2;
return True;
}
}
/****SubString****/
Bool SubString(char *sub,char *Str,int pos,int lenth)
{
int len,i;
len=*Str;
if(pos<1||pos>len)
{
*sub=0;
return True;
}
if(lenth<0||lenth>len)
{
printf("SubString Error lenth!\n");
return False;
}
if(pos+lenth>len+1)
{
printf("SubString Error lenth!\n");
return False;
}
for(i=0;i<lenth;i++)
{
*(sub+i+1)=*(Str+pos+i);
}
*sub=lenth;
return True;
}
/****Index****/
int Index(char *Str,char *s1,int pos)
{
int len,len1,i;
Sstr sub;;
len=*Str;
len1=*s1;
if(pos+len1>len||pos<1)
{
printf("Error pos value!\n");
return 0;
}
i=pos;
while(i+len1<=len+1)
{
SubString(sub,Str,i,len1);
if(StrCompare(sub,s1)==0)
return i;
i++;
}
return 0;
}
/****Replace****/
Bool Replace(char *Str,char *s1,char *s2)
{
int i,len,len1,len2,index;
if(s1==NULL||s2==NULL)
return False;
len=*Str;
len1=*s1;
len2=*s2;
i=1;
if(len1>len)
{
printf("Repalce Error string1!\n");
return False;
}
while(i+len1<=len+1)
{
index=Index(Str,s1,i);
if(index==0)
{
printf("Master str has no sub str like s1!\n");
return False;
}
StrDelete(Str,index,len1);
StrInsert(Str,index,s2);
len=*Str;
i=index+len2;
}
return True;
}
/****StrInsert****/
Bool StrInsert(char *Str,int pos,char *s1)
{
int i,len,len1,re_len;
Sstr re_s;
len=*Str;
len1=*s1;
if(s1==NULL)
{
printf("invalid str1!\n");
return False;
}
if(pos>len+1||pos+len1>MAX+1)
{
printf("Error pos!\n");
return False;
}
re_len=len+1-pos;
if(SubString(re_s,Str,pos,re_len)==False)
{
printf("Insert error !\n");
return False;
}
//DisStr(re_s);
/*for(i=0;i<len1;i++)
*(Str+pos+i)=*(s1+i);
for(i=0;i<re_len;i++)
*(Str+pos+len1+i)=*(re_s+i+1);*/
//StrDelete(Str,pos,re_len);
StrDelete(Str,pos,re_len);
//DisStr(Str);
ConCat(Str,Str,s1);
ConCat(Str,Str,re_s);
//*Str=len+len1;
return True;
}
/****StrDelete****/
Bool StrDelete(char *Str,int pos,int length)
{
int i,len,len1,re_len;
Sstr re_s;
len=*Str;
if(pos+length>len+1)
{
printf("Delete error 1\n");
return False;
}
if(length>len)
{
printf("Delete error 2\n");
return False;
}
re_len=len-pos-length+1;
if(SubString(re_s,Str,pos+length,re_len)==False)
{
*Str=pos-1;
printf("Delete error 3\n");
return False;
}
*Str=pos-1;
ConCat(Str,Str,re_s);
return True;
}
/****DisStr****/
void DisStr(char *Str)
{
int i,len;
len=*Str;
printf("%d ",len);
for(i=1;i<=len;i++)
{
printf("%c",*(Str+i));
}
printf("\n");
}
评论0