QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5816|回复: 5
打印 上一主题 下一主题

[原创]发一道数据结构上机题(串的匹配)

[复制链接]
字体大小: 正常 放大
刘伟        

1

主题

0

听众

17

积分

升级  12.63%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2006-4-15 16:19 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
 

int Index-BF ( SString S, SString T, int pos ) {

// S T 均采用定长顺序存储结构,S[0] [0] T[0] 存放串长度。

S T 均采用定长顺序存储结构,S[0] [0] T[0] 存放串长度。

// 返回模式 T 在主串 S 中第 pos 个字符之后的位置,如果不存在,

返回模式 T 在主串 S 中第 pos 个字符之后的位置,如果不存在,

// 则返回函数值 0。其中 T 非空,1posS[0]-T[0]+1[0]-T[0]+1

则返回函数值 0。其中 T 非空,1posS[0]-T[0]+1[0]-T[0]+1

i = pos; j = 1;

// 从主串 S 的第 pos 个字符起和模式 T 的第一个字符比较

i = pos; j = 1;

// 从主串 S 的第 pos 个字符起和模式 T 的第一个字符比较

// 从主串 S 的第 pos 个字符起和模式 T 的第一个字符比较

while ( i <= S[0] && j <= T[0] ) ( i <= S[0] && j <= T[0] ) {

if ( S = = T[j] ) { ++i; ++j; ++i; ++j; } // 若字符相等,则继续比较后继字符

while ( i <= S[0] && j <= T[0] ) ( i <= S[0] && j <= T[0] ) {

if ( S = = T[j] ) { ++i; ++j; ++i; ++j; } // 若字符相等,则继续比较后继字符

{ ++i; ++j; ++i; ++j; } // 若字符相等,则继续比较后继字符

else { i = i – j + 2; j = 1; i = i – j + 2; j = 1; } // 若字符不等,则指针后退重新开始匹配

{ i = i – j + 2; j = 1; i = i – j + 2; j = 1; } // 若字符不等,则指针后退重新开始匹配

} // while 结束

} // while 结束

if ( j > T[0] ) return i–T[0];

else return 0; 0;

( j > T[0] ) return i–T[0];

if ( j > T[0] ) return i–T[0];

else return 0; 0;

( j > T[0] ) return i–T[0];

else return 0; 0;

} // Index-BF

// Index-BF

 
//Index_BF.cpp



#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#define MAXSTRLEN 255



typedef unsigned char SString[MAXSTRLEN+1];                    //from 0 to 256 becoz of '\0'



int Index_BF(SString S,SString T,int pos)                      //Index_BF() function

{

    int i=pos,j=1;                                             //from the pos char in main SString on

	while(i<=S[0]&&j<=T[0])

	{ if(S==T[j])

		{++i;

	     ++j;

		}

	   else

		{ i=i-j+2;

	      j=1;

		}

	}// end of while

	if(j>T[0]) return (i-T[0]);

    else return (0);

}//end of Index_BF() function



 

void main()                                                     //main() function

{

   SString S,T;

   int pos;                                                     //  1<=pos<=S[0]-T[0]+1;

   int m,n,r;                                                   //  the length of SString S and T

   cout<<"Index_BF.cpp"<<endl<<"============"<<endl<<endl;

   cout<<"Please input the Main SString S: <eg. student> ";

   cin.getline(S+1,MAXSTRLEN);

   cout<<"Please input the SString T : <eg. den> ";

   cin.getline(T+1,MAXSTRLEN);

   cout<<"From ? on: <eg. 1> ";

   cin>>pos;



   for(m=0;S[m]!='\0';m++);                                      // get the length of SString S

   S[0]=m-1;

   for(n=0;T[n]!='\0';n++);                                      // get the length of SString T 

   T[0]=n-1;

 

   if(r=Index_BF(S,T,pos))                                

	  cout<<endl<<"The postion of T in the Main SString S is: "<<r<<endl<<"...OK...!"<<endl;

   else cout<<"Failure to Index the SString!"<<endl;

   getch();

}//end of main() function

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

1

主题

3

听众

20

积分

升级  15.79%

该用户从未签到

新人进步奖

回复

使用道具 举报

qswb        

0

主题

3

听众

23

积分

升级  18.95%

该用户从未签到

新人进步奖

回复

使用道具 举报

xjtu_yu        

6

主题

3

听众

63

积分

升级  61.05%

该用户从未签到

新人进步奖

回复

使用道具 举报

gssdzc 实名认证       

0

主题

2

听众

941

积分

升级  85.25%

该用户从未签到

群组兰州大学数学建模协会

回复

使用道具 举报

1

主题

1

听众

19

积分

升级  14.74%

该用户从未签到

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-7-18 01:47 , Processed in 0.670602 second(s), 80 queries .

回顶部