数据结构串的顺序存储基本方法实现
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXLEN 255
struct SString
{
char * ch;
int length;
};
void StrPrint(const SString &T);
bool InitStr(SString &T){
T.length = 0;
T.ch = (char *)malloc(sizeof(char) * MAXLEN);
if (T.ch !=NULL)
{
printf("malloc() 申请成功\n");
return true;
}else
{
printf("malloc() 申请失败\n");
return false;
}
}
bool StrAssign(SString &T,const char * c){
T.length = 0;
while (*c!='\0')
{
T.ch[++T.length] = *c;
c = c + sizeof(char);
}
return 0;
}
bool StrCopy(SString &T,SString S){
for (int i = 1; i <= S.length; i++)
{
T.ch[i] = S.ch[i];
}
T.length = S.length;
return 0;
}
bool StrEmpty(SString S){
if (S.length == 0)
{
return true;
}else
{
return false;
}
}
int StrCompare(SString S,SString T){
int i;
for (i = 1; i <= S.length && i<=T.length; i++)
{
if (S.ch[i]!=T.ch[i])
{
return S.ch[i] - T.ch[i];
}
}
return S.length - T.length;
}
int StrLength(SString S){
return S.length;
}
bool SubString(SString &Sub,SString S,int pos,int len){
Sub.length = 0;
for (int i = pos; i <= pos + len -1; i++)
{
Sub.ch[++Sub.length] = S.ch[pos+Sub.length];
}
return true;
}
bool Concat(SString &T,SString S1,SString S2){
for (int i = 1; i <= S1.length + S2.length; i++)
{
if (i <= S1.length)
{
T.ch[++T.length] = S1.ch[i];
}else
{
T.ch[++T.length] = S2.ch[i-S1.length];
}
}
return true;
}
int Index(SString S, SString T){
if (T.length > S.length)
{
return 0;
}
SString sub;
InitStr(sub);
int i=1,n=S.length,m=T.length;
while (i<=n-m+1)
{
printf("i = %d m = %d",i,m);
SubString(sub,S,i,m);
printf("sub = ");
StrPrint(sub);
printf("StrCompare(sub,T) = %d\n",StrCompare(sub,T));
if (StrCompare(sub,T)!=0)
{
++i;
}else
{
return i;
}
}
return 0;
}
void StrPrint(const SString &T){
for (int i = 1; i <= T.length; i++)
{
printf("%c",T.ch[i]);
}
printf("\n");
}
int main(){
SString Q;
SString T;
SString Sub;
InitStr(Q);
InitStr(T);
InitStr(Sub);
const char * temp = "woshizhendeai shangni";
const char * temp2 = "ni";
StrAssign(Q,temp);
StrAssign(T,temp2);
StrPrint(Q);
StrPrint(T);
Concat(Sub,Q,T);
StrPrint(Sub);
printf("%d\n",Index(Q,T));
return 0;
}