- 在线时间
- 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># t% S; l( `* I
< >[[/hide]</P>#include <iostream>/ Q3 ], K2 Y, E) a) I \
#include <fstream> r! U8 ? L+ l+ e4 s
using namespace std;
6 _6 z7 ~$ E; V" O" N* M- u# n7 Bifstream in("input.txt");
' Q0 V- ]( Z; H5 ?& O- Oofstream out("output.txt");
$ D4 i Y, T! H9 c+ v3 rclass String9 b7 n% k* b+ n6 e$ z
{9 r9 x( q5 m. g/ L. _
public:
/ D7 O4 B/ g8 Q8 g String(char *s="");
3 d, w& X5 }- N- H! ?( l# v! j String(const String& s);/ v, k N0 s6 T, f/ j
~String();
% v- d" x" t+ T* ]* y6 D+ U int Length() const; m1 C+ l" h- x/ |' B
int ReadString();+ j& h( C1 p1 V) q' t' r9 x8 E
int Rs();
! a% W5 f+ N( ~7 d6 M1 }) l( ] void Prefix();
~$ c; p$ M+ l! E" L void ModifiedPrefix();+ `% l% l! k+ Q) Z
int Match(int i,String& t);
. K$ c& Y5 I. o( j private:; T$ j( z% m; j& e; v) H
char *str;
0 O$ r9 V+ L7 O6 u. Q int *pre;; y+ i! p. T% h' s, {5 |
int size;
6 Z: I5 q8 _# _5 f};
5 e/ I/ C& P: [" V2 q" jString::String(char *s)
2 B: ?& V9 `, n* D& U6 j- F6 d{
# |, Z7 l+ Q. C) w+ X+ \8 `2 ` size=strlen(s)+1;
( S* T7 ^3 L* o0 ^2 s; X/ e str=new char[size];
3 y/ [9 V) S6 b e9 v2 _8 e( ] if(str==0)
& o: N- O/ u A7 w; u% |! x# O9 @) s throw "error";
) z; L) D' P, U$ q% d strcpy(str,s);
7 U" r- e) F4 d pre=new int[size];/ [# U% ]( {+ V" t. C9 h* A+ a
if(pre==0)8 I# Y2 n; p6 b% t$ _) p
throw "error";6 m% B F0 A$ i8 ~; ^0 e
}: ^4 x' o1 J7 Y/ O8 r' P* Q
String::String(const String& s)8 X/ @; q# i8 l) y# x }1 {( B
{
/ U r ]& J% N8 \: d size=s.size;! Y! M+ v4 ~ \9 q6 K+ }# P0 X
str=new char [size];' X; d2 ]" t% j! d& n
if(str==0)' U# r. u2 k5 K4 ~4 N
throw "error";- ^- ~) |8 x5 L, M" I) g8 A
strcpy(str,s.str);
( b+ |1 k4 `5 k+ D; a pre=new int [size];
7 o/ Q9 K( A9 G if(pre==0)' N4 l# }7 J' H! C; a, P
throw "error";; @5 l' n) o! A% x! g+ X
}
) K0 T% B1 o- C! o; a& ^, C: I" A, ~String::~String()
( N: c4 B& r; _% Z9 g1 @{! I/ F- e: q; D" k% O
delete [] str;6 G8 d) S. D" a9 D
delete [] pre;# x: z6 A8 ~# v1 h( g: u. j
}0 Y2 M/ @- f1 \1 G
int String: ength() const
" D0 o( c H3 U{$ s$ X4 t4 V( @$ [$ F( q/ F
return size-1;
# B4 o& T" g' o* }}7 n+ \: V% Y" ?2 ]$ W+ w
int String::ReadString()3 z' X: K0 ^( o% s
{' U. Z3 K- S4 V$ G7 c% i& d
char tmp[256];
( S* F j+ ?, r' z* e8 l$ {* |* u if(in>>tmp)# o+ \) i( w8 Z S6 j+ u6 O
{& L, u W8 G/ h, M
delete [] str;
# @, ^( X1 O, t9 l5 o size=strlen(tmp)+1;
0 A! `3 l w/ p. _6 l str=new char [size];' g5 Q/ N1 \) m' B
strcpy(str,tmp);
* T" y6 e, |& G7 v+ w: s return size-1;
* Y: V6 _- s/ b; O" | }
) X: V9 m, s8 f, I5 ]$ q, s" ^ else
6 G! u4 i3 k- X9 L- Z% ~ return -1;) V7 j& u! k9 V0 y" w
}% Q @; Q3 t: k
int String::Rs()
- m8 Z( V$ _3 k& m( U{8 x2 d: v) X% m& |0 o. q
char tmp[256],c;
% g d+ E; y6 b u) `: g6 |2 F p int i=0;5 [: d9 Q$ n( j
while(in>>c)# B& _, q3 o/ p$ m
{0 g6 G) r2 D, H$ r# [& N# Q
if(c!='*')
+ s; [' Z6 w: j tmp[i++]=c;
% d$ r' h1 x2 }: m o else if(c=='*'&&i>0)
4 B: k Z% ~# s0 K6 J# P break;
5 \4 u5 A: B! G7 r3 a9 M }
# \0 N1 h7 e+ E- R. t0 _ if(i>0)& u, u, V% U, m6 ~" ^* T2 n
{
o9 j" P* |# n1 z- H% g* ~! r delete [] str;
$ x, L. R2 V' E) L' B2 J size=i+1;
: ^2 ?5 S: s7 [8 N* n4 I% i) _0 ?1 o str=new char[size];' ^8 v+ U+ U. {; a
if(str==0)* g8 @$ l& J! V$ e, E
throw "error";
1 W( ~7 U5 ^9 d2 |4 g for(i=0;i<size-1;i++)) O4 u9 q1 K- D. c% M( g2 |
str=tmp; , |, M0 o' S* r) ^! G
return size-1;
7 n4 q# V, w4 x$ ?8 w3 K. f }! D! s/ b+ g9 E9 {; T: }: o
else
1 O2 d% T+ V9 | return -1;
/ S% l% G) `. l; h/ N: h& m+ c}" X: y1 r$ A; E( M( W4 M) x5 ?
void String: refix()5 e# p3 R& |: B5 b6 a: Q
{
7 r! n* x2 I4 ~ int m=Length();: W3 I; B4 k5 @5 r
delete [] pre;
, K; f1 Z) A( e& p# V5 }% o# ^ pre=new int [m+1];, u7 o* d* y5 E' {; Z4 [4 y# K2 c5 O
pre[1]=0;9 u# P ^/ {: ], n# r
int k=0;
( z+ ]1 o" m2 s8 U5 k$ b for(int i=2;i<=m;i++)
3 Q+ J4 `* _/ ^( } {. G4 B5 ^; Y3 t% ~$ [
while((*(str+i-1)!=*(str+k))&&(k>0))5 _& y" H3 d+ S+ T$ M* k! c8 R
k=pre[k];
0 c" y/ C0 M% a- Z) J# ` if(*(str+i-1)==*(str+k))/ B( E9 M7 {. a6 E
pre=++k;
7 L% k8 S& V. ^+ \7 ?, g else
, T8 J2 B3 S" j1 v5 } pre=0;
4 ~6 i+ u/ J8 R }, W; S4 q, ]! Y2 \# \
}0 l9 |! [0 q! Q4 l
void String::ModifiedPrefix()
) ~% N$ v, m. D. C5 R{# N/ k4 @, G7 u2 M* j: V
int *f;
' ^. O+ l/ |# P int m=Length();4 L. K3 A0 {8 z1 R
f=new int[m+1];
1 N1 G# Z4 z9 G- Y& ^( E% p Prefix();
# v- C4 c+ W' c: ^8 Z4 f for(int i=1;i<=m;i++)* a% C& B0 Y1 d9 J# u5 \: ]9 f2 _
{( ?2 T8 g' t( I. [
f=pre;
! u6 ?) \; v1 P5 w9 y1 ]* [ } {* e, h; `; F8 O& |3 c
for(i=1;i<m;i++)
* N* A3 o8 M0 g) R1 y( N. U {4 I) v+ J4 y# i n% d2 Q
int k=f;
$ y2 P; y3 w# {& k/ O5 T if((k==0)||(*(str+i)!=*(str+k)))
6 }5 ^( @0 G* n& b# X4 P# I1 Y pre=k;0 A7 ^. q# `" f- v4 V
else ( ]" f' ]0 w6 ~% P9 X
pre=pre[k];
) s6 z' F9 e+ @4 y }
$ ]. w5 Q, z6 @+ Q" [ delete []f;
) l# z# V$ _, _" \: Y" d}
Y- ]0 J7 z* D. N( sint String::Match(int i,String& t)& z* F2 X* `: J
{
5 f5 q$ b& Z- p6 Y) U int j=0;8 s Q v6 s- F. U3 c
int n=Length(),m=t.Length();/ J1 p* d5 |0 A' L" H% P6 r6 L. c
t.ModifiedPrefix();) e' K) T% r' L4 I
while((i<=n)&&(j<m))2 j+ M1 c" M( n/ H6 c
if(str[i-1]==t.str[j])
. m; f6 ~/ M+ {* a {# Z5 c5 a9 g$ z% |3 T% D9 m
i++;$ A* ` B( E2 A
j++;
; q7 ?3 H# z6 {% k+ ]% H }7 ]: T9 B* H- H% j; A' E2 Q
else 8 C1 z+ O7 H! x8 Y1 W
if(j==0)
# o4 v% S4 y% ~( r p7 U0 V i++;
# K9 Z: F& T& }& _ else
, { g) @) X" S6 _9 Q1 ^& F+ W$ a j=t.pre[j];5 s# T' k' ]6 F7 h" [
if(j<m), V% D; y4 N6 I" W! H1 e+ y
return 0;
* p* `% U7 E: a) q* c: h4 ~& I& e else
% h, e/ [, A+ z' P return i-1;- s% `9 U8 v0 S6 b1 n2 y
}+ o. ]" l1 Z! J+ F/ E
int main()0 d) _+ m& e8 Q8 `2 `0 }
{
7 m; I. U/ L+ K0 p# d+ A+ |2 @ if(in.fail())
0 O! [. ?: U$ K3 @# l {
2 T' ~/ x9 k; _9 E) l" d cout<<"the input.txt is not exist!";0 h4 C" v1 p& M. J
exit(1);}! C# v5 r0 ?; l
int i=1;
4 U, Y/ Q( P. Z String s,t;
7 T6 i# T; i# j" L s.ReadString();6 H: `6 W {4 A8 m9 u4 a/ g) S
while(t.Rs()+1)
1 j6 r0 S4 u) x {( `+ q$ ]. @. o1 N* P* r3 t
i=s.Match(i,t);
5 M7 b$ ]$ c$ G& p6 c5 B' e if(!i)5 y0 M) s4 U8 M# Z$ ^; Z
{
4 `- k) c9 v# p out<<"No"<<endl;
0 j A" i! h1 \ f1 R Y- S9 n break;/ ?( i3 O6 h1 c( e" R
}2 y; l: L/ T3 x' e! U
}+ O r1 X) b# A: L0 e" F5 @
if(i)5 j9 @" W9 i6 x9 H$ i
out<<"Yes"<<endl;
8 d0 e1 S( s ^2 g& Z9 D, X; G return 0;$ R; S" L( r' |. b. f1 ?4 r
} |
zan
|