串——数据结构的实现——定长存储顺序。
//头文件sstring.h
#pragma once
#include<iostream>
using namespace std;
#define STRING_SIZE 20
typedef char Sstring[STRING_SIZE+1];
int length(Sstring S)
{
return strlen(S);
}
void StrAssign(Sstring T, char *str)
{
int i=0;
while(*str != '\0')
{
T[i++] = *str++;
}
T[i] = '\0';
}
bool StringConcat(Sstring T,Sstring s1,Sstring s2)
{
int a = length(T);
int b = length(s1);
int c = length(s2);
if(a>b+c)
{
for(int i=0;i<b;i++)
{ T[i] = s1[i];}
for(int j= b; j < b+c;j++)
{ T[j] = s2[j];}
T[j] = '\0';
return true;
}
else if(a>b && a<b+c)
{
for(int i=0;i<b;i++)
{ T[i] = s1[i];}
for(int j=b;j<=STRING_SIZE;j++)
{ T[j] = s2[j];}
T[j] = '\0';
return true;
}
else if(a<b)
{
for(int i=0;i<=STRING_SIZE;i++)
{T[i] = s1[i];}
T[i] = '\0';
}
return true;
}
void StrCopy(Sstring T, Sstring S)
{
int i=0;
while(S[i] != '\0')
{
T[i] = S[i];
i++;
}
T[i] = '\0';
}
bool StrEmpty(Sstring S)
{
if(S[0] == '\0')
return false;
return true;
}
int StrCompare(Sstring T, Sstring S)
{
int i=0;
while(T[i]-S[i] == 0)
{
i++;
}
if(T[i]-S[i]>0)
return 1;
if(T[i]-S[i]<0)
return -1;
else
return 0;
}
void ClearString(Sstring T)
{
int i=0;
T[i]='\0';
}
char * SubString(Sstring T,int pos,int len,Sstring S)
{
if(length(T)<pos+len)
return false;
for(int i= 0;i<len;i++)
{
S[i] = T[i+pos];
}
S[i] = '\0';
return S;
}
int Index(Sstring S,Sstring T,int pos)
{
int s_len=length(S);
int t_len=length(T);
for(int i=pos;i<=s_len - t_len;i++)
{
for(int j=0;j <= t_len;++j)
{
if(S[j+i]==T[j])
{
if(j == t_len-1)
{return i;}
else
{continue;}
}
else
break;
}
}
return 0;
}
bool Replace(Sstring S,Sstring T,Sstring V)
{
int sl=length(S);
int tl=length(T);
for(int i=0;i<sl-tl;i++)
{
for(int j=0;j <= tl;++j)
{
if(S[j+i]==T[j])
{
if(j == tl-1)
{
for(int m =0;m<tl;m++)
{
S[m+i] = V[m];
}
}
else
{continue;}
}
else
break;
}
}
return 0;
}
bool StrInsert(Sstring S,int pos,Sstring T)
{
//1<=pos<=length(S)+1
int sl=length(S);
int tl=length(T);
if(pos>sl+1)
return false;
for(int i=0;i<=sl-pos;i++)
{
S[sl+tl-i]=S[sl-i];
}
for(int j=pos;j<tl+pos;j++)
{
S[j] = T[j-pos];
}
return true;
}
bool StrDelete(Sstring S,int pos,int len)
{
if(pos>length(S)+1)
return false;
for(int i=pos;i<length(S)-pos;i++)
{
S[i]=S[i+len];
}
return true;
}
void DestroyString(Sstring S)
{
S[0]='\0';
}
主函数:
#include"sstring.h"
void main()
{
char *str1="asdcsdhasda";
char *str2="sd";
char *str3="zr";
Sstring S;
Sstring T;
Sstring V;
StrAssign(S,str1);
StrAssign(T,str2);
StrAssign(V,str3);
Replace(S,T,V);
//StrInsert(S,3,T);
//StrDelete(S,1,2);
/*
int ret=Index(S,T,3);
cout<<ret<<endl;
*/
//int ret=StrCompare(T,S);
//StrCopy(S,T);
//cout<<ret<<endl;
//cout<<SubString(T,0,5,S)<<endl;
//cout<<length(S)<<endl;
cout<<S<<endl;
}
注释部分为各函数的,图片没有一一附上。