- 在线时间
- 0 小时
- 最后登录
- 2005-4-22
- 注册时间
- 2005-4-22
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 72 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 26
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 7
- 主题
- 2
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   22.11% 该用户从未签到
 |
< >很经典的一道问题,我想大家应该都会,我这次只是想帮助那些还不是很懂得人,还是一样附上解题报告和源代码。觉得好的就顶,主要是用模式串来解决。</P>
' E5 @! t2 i: ~# ~< >[[/hide]</P>#include <iostream>
1 o6 _9 d2 e [, U0 R: A#include <fstream>
+ ]8 r/ H8 p) @using namespace std;
) e3 g& |0 x G* F6 Cifstream in("input.txt");
% H; h2 x8 Y3 bofstream out("output.txt");" f0 u& C' a: `1 e1 b8 J6 _3 r
class String, n# `. J5 n. g B3 B, u4 K: M s% B
{
, L" {! a6 Y1 M( c+ H) h, O9 i5 x public:6 v/ m8 |( R& V; H! U
String(char *s=""); o y* t/ o6 E# y( [. L$ U
String(const String& s);
& M, T& Y" a0 @) C5 p0 ^ ~String();
0 `; N5 j; z `& f6 B, R int Length() const;
7 V4 Q0 {5 x! ?* d int ReadString();. w( x/ D7 h$ N3 m% q
int Rs();
0 y5 o: G, A3 ^& D3 O" x& V void Prefix();
' _0 z5 W1 ^6 ?+ D6 G" O void ModifiedPrefix();
+ i, E) E4 l( t3 P! w( g int Match(int i,String& t);: D# N2 W( l% v( h2 U
private:' v& Q# y% g+ _% K" |" R. Y
char *str;
. d/ Q$ T& S$ E3 O( ] int *pre;
5 C, D5 w" j' k$ l int size;
' f9 ?) I9 x6 b};
9 Q5 |; ~' y1 _$ d) e. `) j' o9 E$ WString::String(char *s)5 ^3 B) ?) t I Z, t7 H. b. T. Z
{
, {" g0 H B4 ~/ L size=strlen(s)+1;8 v& e% X8 V$ {6 P7 v m. s
str=new char[size];, F/ q7 ^; {7 G. L8 @3 Y; O; ~
if(str==0); p' s' Y Z0 h* J# j8 r1 r
throw "error";
1 [4 W+ a- N) G( U0 _8 }+ l strcpy(str,s);& H- Q" r) p; f- T3 G& m2 A
pre=new int[size];" M3 I& [1 X0 H) Q
if(pre==0)
( X h! Q) C" [* y& `; u% r; X throw "error";% M, s, Y& T# a2 M9 j( _
}
2 m1 b$ R2 c7 z+ I0 X) G! k7 HString::String(const String& s)6 i! h5 w3 [7 X3 M( r6 `
{ z. Y* O( _& J. b/ c) @ o: R
size=s.size;
% R! Z( G2 H& U/ i4 q( ?" Y str=new char [size];
5 `% R- D" }* I! s% W if(str==0)4 S1 C* c2 b- ~3 L0 J z; i
throw "error";1 V) u' D* @6 v/ X
strcpy(str,s.str);* Z" G" K; S( I' r" f5 ~
pre=new int [size];; k2 `2 L' D$ E6 Z5 z
if(pre==0). ^* _6 r( o9 X0 b4 m6 T' e
throw "error";( V. u0 Z& H) X4 T: N8 \; W. p; q
}
+ q' |/ K. ^+ vString::~String()& K2 b. Z+ [- B- O: }# B6 p
{
$ ~- t+ l8 N$ s( S* ]. V6 T delete [] str;
& ? J7 @/ U# q$ O' f$ l( y; X+ O- L delete [] pre;8 _9 [( {: s- E! o) B/ `) P
}
+ [1 Y0 O, I% R9 _ kint String: ength() const5 z# ?6 K5 A. P2 v2 n# O
{
+ Z( `6 S! r- W return size-1;* `* O+ O- ^, [
}
7 T+ z/ `; f! ]* Dint String::ReadString()
! |3 i% M* o9 ~% V{
- G' L% p, M# u char tmp[256];
4 D, M9 S: l1 G) k; {' i if(in>>tmp)9 m6 L) p' j4 M
{
0 i; |4 K( @5 ^7 }7 I2 W delete [] str;
. o. {2 f* A: g+ P- Z$ c- @7 T size=strlen(tmp)+1;2 a% R8 U6 F" O3 r% b3 A
str=new char [size];# t* v7 y& a# [/ d2 b5 K
strcpy(str,tmp);
! \4 ?( O: u. F% V8 X return size-1;! m( }) C; D, E; C
}$ c2 ^. l" t& G. D! D1 |
else0 r* S& e! U! K3 C8 C- Y
return -1;' K- |+ A. x1 g7 I
}
- F1 S9 t& I- j. }4 G. @( Fint String::Rs()/ `* y* j/ n3 s/ I4 S- m( m" |* _
{4 D R) T& E# C7 V9 N; z
char tmp[256],c;
% {, q( `3 `, k3 {( A int i=0;+ h& a" W6 Y, W) W
while(in>>c)
- ]4 Q0 Z& p! ]6 d$ d: }) c {
- v( B+ l' n8 H if(c!='*')
9 K/ I2 V" _% _ tmp[i++]=c;- ]/ ^- e ~ c1 A, `' k
else if(c=='*'&&i>0)- F) r' g! l; m; V: t8 ?# i, D3 d
break; E9 H u8 D( _, t3 u. F
}
^& t4 s1 A: B9 O; F' ~1 F0 `) @ if(i>0)
. i0 `7 w3 |3 ~2 C' L5 _) V4 V b {0 Q1 F" s3 x9 I1 p& H9 ~8 w
delete [] str;0 S% d/ d# [5 z' e: B
size=i+1;
# @% g4 V% G, G9 O# J4 J8 W# `- U str=new char[size];
+ j1 |2 E2 `" E: }% T8 J8 W if(str==0)
, E6 q" b5 i, S% i+ v9 k9 A throw "error";
# a9 s/ J8 m/ p5 T9 S8 f for(i=0;i<size-1;i++); i/ }; b/ ?; ^. B
str=tmp;
# l' c- R. y) N& k return size-1;1 Q3 P8 ^% _) P# T& R, }4 S
} }; `. H: x& ~: n0 m
else
, }7 G% X6 e9 D/ R return -1;
$ n, c, y5 k) o& c' G# H}
. X. l) }; ~) \8 N% Z2 ?! Ovoid String: refix()# k& `, m! b- B' Q7 A
{
. K. H% v% E. x6 H# c, X( g int m=Length();
8 ?" j$ l2 b4 _* m delete [] pre;2 b2 h$ e: ]' i
pre=new int [m+1];. Z; I* D. v: F. @- b8 d' h
pre[1]=0;- k$ ], U- d% j1 R- v0 [- u1 R+ D+ r
int k=0;
+ B N( w0 r Y4 T+ g8 e: F6 \ for(int i=2;i<=m;i++)
; C3 `+ B3 C' Q+ | {
5 Q, k' Q; X3 J while((*(str+i-1)!=*(str+k))&&(k>0))
- x2 O$ G- ?! c0 \ k=pre[k];
: _: l) f }6 S if(*(str+i-1)==*(str+k)), b1 X3 ^0 C" y* z- C+ S0 y6 Y }
pre=++k;- M/ E: n& v3 Q8 G9 \+ v2 u
else
( O4 d% f' O3 s1 z pre=0;
* q9 R4 d+ m: c& H. G8 d+ T }
5 R) X1 K2 e4 R2 P}1 L* z6 ~3 n) J: d
void String::ModifiedPrefix()
: ]; s2 A$ y$ i, D{- s/ a% l1 |$ u( f! J% |
int *f;
2 F/ g( L; Y2 q6 v int m=Length();
7 p) t6 Y& ^( H! q! o% P0 H0 s1 | f=new int[m+1];, b$ j# y" C& n& I8 e b
Prefix();
5 T* h; K, N I6 q8 v for(int i=1;i<=m;i++)
* _# u! i: W' \, J6 R4 P {) n. u, K/ y) h4 u+ l
f=pre;
; Y+ C8 W6 r; F y) j: B% m0 u }- }1 K- M1 d, P K' t1 q9 d
for(i=1;i<m;i++)
; \& L* A3 R$ Z, ~5 e# e3 J {" D) M2 ^1 |3 c: S% O
int k=f;
; l" U( n Q8 J: ` F( \, z+ a if((k==0)||(*(str+i)!=*(str+k)))
" \" a2 m; K, k+ z/ M pre=k;
S# ^/ S; L; T1 C, B else
$ L: Z# c n* d2 q7 x( @( D C pre=pre[k];
& f5 p9 X, s4 ^2 \ }
0 w' m* z) L& g delete []f;9 L# V. _0 ]6 U* {) Z# C5 i) D
}
3 E0 t# I p/ r: g% M5 Fint String::Match(int i,String& t)
- B" ]. T2 C& s1 Q' V% D+ [2 |{) \! M( b; ^0 v3 W# H+ \9 L0 }
int j=0;& T/ d; v' G8 \0 N/ f
int n=Length(),m=t.Length();
7 I l5 u) S( J7 c0 l, Y; S t.ModifiedPrefix();
" C; F; S2 A& H+ \: y5 `, s while((i<=n)&&(j<m))
- d0 a/ B; l& a- L6 @. W$ l4 d2 o if(str[i-1]==t.str[j])
2 W. ?9 B0 S) q4 i. ]6 H' a {
0 u5 s/ x" \. ^; i8 s, z3 o i++;
2 ]% G5 S7 T( S J; W3 u8 F' l) A j++;
. e% N# q7 ^. M$ P/ F5 z% }$ C }
. i+ K x) F; d7 m W& \ else
1 C N& h. q! _. O3 \+ X' z if(j==0)6 m9 s/ D7 j. `2 T" H, n8 `* k
i++;
+ T" O0 K- k9 W4 v7 s else ( Z2 Z0 W3 `" K! c5 o5 J
j=t.pre[j];
: |* k5 a+ H4 z0 ` if(j<m)$ F7 u v/ s. j$ ]7 f0 a
return 0;' g, w% d+ N) N$ P
else 3 ^ b$ _$ u+ j% b
return i-1;7 p% k* s+ P4 G! T' M
}
9 \* T$ b( E Q3 Zint main()% X Z' D/ F* G- o
{
0 R3 |: V/ b# h) @( T- e% h if(in.fail())
3 c+ s/ Z3 Y2 x8 J, I {9 J# [4 d1 j* J) k& Y/ `) U, Y4 |" \
cout<<"the input.txt is not exist!";9 x! S: A6 c$ v O6 v: X
exit(1);}. z5 x- F5 Z3 u' o
int i=1;
+ _; k* k* |/ l% P) O/ s3 j String s,t;
6 w6 p1 J& L, c, D s.ReadString();
# B0 c: }1 L8 z5 c& d while(t.Rs()+1)
, p k! s( F9 k8 B9 H# a {
5 L0 c; Y* E/ x6 ^ i=s.Match(i,t);- g, B6 Y7 X3 `& m/ D
if(!i)
7 W3 ?1 U3 U+ x$ O; Z {; o" z. k( C m6 d5 ~
out<<"No"<<endl;3 m0 _, y3 |9 |, a/ N8 P$ R1 V
break; m6 x+ U) a! l& ~
}
6 D5 e8 H# M+ y! L }
4 |6 Z9 k- G! I; t& p if(i)
# O2 k7 e: ?, h1 J/ N' P out<<"Yes"<<endl; _, s* ~. G3 h# t9 u
return 0;
/ F [9 p" `+ J f1 B} |
zan
|