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&lt;j;i++) s-&gt;str[i]=a[i]; s-&gt;curlen=j; }

void show(SString S) { int i; for(i=0;i&lt;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&lt;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&gt;=1 &amp;&amp; pos&lt;=s.curlen) &amp;&amp; (len&gt;=0 &amp;&amp; len&lt;= s.curlen- pos+1)) { for(i=pos-1;i&lt;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&gt;0) {

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


 while (i&amp;lt;=n-m+1) 
 { 
   sub=SubStr(s,i,m);
	//printf(&quot;%d&quot;,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(&quot;\n请输入主串S:&quot;); gets(a); printf(&quot;\n请输入子串T:&quot;); gets(b); InitString(&amp;S,a); InitString(&amp;T,b); printf(&quot;\n主串S:&quot;);show(S); printf(&quot;\n子串T:&quot;);show(T); printf(&quot;\n请输入开始搜索的位置:&quot;); scanf(&quot;%d&quot;,&amp;wz); x=StrIndex(S,T,wz); printf(&quot;\n子串在主串的位置是%d\n&quot;,x); }


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