51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

【数据结构】串的基本操作

利用最小操作子集实现定位函数 {#利用最小操作子集实现定位函数}

#include <stdio.h>
#define  MaxLen  256    

typedef struct
{
char  str\[MaxLen\];                              /定义可容纳MaxLen个字符的字符数组/
int  curlen;                                    /定义当前实际串长度/
} SString;


void InitString(SString \*s,char a\[\])
{
int i,j;
for(j=0;a\[j\]!='\\0';j++);
for(i=0;i\<j;i++)
s-\>str\[i\]=a\[i\];
s-\>curlen=j;
}


void show(SString S)
{
int i;
for(i=0;i\<S.curlen;i++)
printf("%c",S.str\[i\]);
printf("\\n字符串实际长度是:%d",S.curlen);
}


int StrLength(SString s){


}


int StrEqual(SString s,SString t)
/判串s和串t是否相等。相等,返回l;否则返回0/
{
int i,j;
if(s.curlen==t.curlen)                     /首先判断两个串的长度是否相等/
{
for(i=0;i\<s.curlen;i++)                  /长度相等则继续比较对应位置的每个字符是否相等/
{
if(s.str\[i\]==t.str\[i\])
j=1;
else
{
j=0;                                  /若对应位置字符出现不等,终止比较/
break;
}
}
}
else                                       /长度不相等则判定两个串不相等,返回0/
j=0;
return  j;
}


SString SubStr(SString s,int pos,int len)
/求出串s中从第pos个字符起长度为len的子串/
{
int i,j=0;
SString ch;
if((pos\>=1 \&\& pos\<=s.curlen) \&\& (len\>=0 \&\& len\<= s.curlen- pos+1))
{
for(i=pos-1;i\<len+pos-1;i++)
{                                         /将s.str\[pos-1\]~ s.str\[1en+pos-2\]复制至ch/
ch.str\[j++\]=s.str\[i\];
}
ch.curlen=len;
ch.str\[ch.curlen\]= '\\0';
}
else
{
printf("\\n error! \\n");                   /参数不正确时返回错误信息/
}
return ch;
}


int StrIndex (SString s, SString t, int pos)
/\* t为非空串。若主串s中第pos个字符之后存在与t相等的子串,则返回第一个这样的子串在s中的位置,否则返回-1。\*/
{
SString sub;
int m,n,i;


if (pos\>0)
{


     n = s.curlen; 
     m = t.curlen; 
     i = pos;


     while (i&lt;=n-m+1) 
     { 
       sub=SubStr(s,i,m);
    	//printf("%d",i);
    	//show(sub);

       if (StrEqual(sub,t) != 0)  
          ++i;
       else 
          return i;                              /* 返回子串在主串中的位置*/
     } 




}
return -1;                                     /\* s中不存在与t相等的子串\*/
}

`main()
{
SString S,T;
char a[MaxLen],b[MaxLen];
int wz,x;
printf("\n请输入主串S:");
gets(a);
printf("\n请输入子串T:");
gets(b);
InitString(&S,a);
InitString(&T,b);
printf("\n主串S:");show(S);
printf("\n子串T:");show(T);
printf("\n请输入开始搜索的位置:");
scanf("%d",&wz);`
`
x=StrIndex(S,T,wz);
printf("\n子串在主串的位置是%d\n",x);
}
`

赞(1)
未经允许不得转载:工具盒子 » 【数据结构】串的基本操作