#include <iostream>
using namespace std;
int main(){
string a , b ;
getline( cin , a ) ;
getline( cin , b ) ;
char c[b.size()+2][a.size()] ;
for( int j = 0 ; j < b.size() - 2 ; j++ ) { //用c二維陣列儲存b-2個a.size()大小的字元
int flag = 0 ;
int J = j ;
for( int I = 0 ; I < a.size() ; I++ ) {
c[j][I] = char(b[J]) ;
J++ ;
}
}
for( int j = 0 ; j < b.size() - 2 ; j++ ) { //如果檢測到字串中有地方符合把b[i]設為-1
bool flag = 1 ;
for( int I = 0 ; I < a.size() ; I++ ) {
if( c[j][I] != a[I] ) flag = 0 ;
}
if( flag == 1 ) {
for( int i = 0 ; i < a.size() ; i++ ) b[j+i] = -1 ;
}
}
int n = 0 ;
for( int i = 0 ; i < b.size() ; i++ ) { //如果連續a.size()個字元都是-1->輸出,否則輸出b[i]字元
if( b[i] != -1 ) cout << b[i] ;
else n++ ;
if( n == a.size() ) {
cout << endl ;
n = 0 ;
}
}
cout << endl ;
return 0;
}
不知道錯哪裡~~
可以試著用兩個for解決,以測資1作範例:
分別比對 and 和 appleandbanana
app and
ppl and
ple and
.
.
.
and and (可以建立一個n儲存有幾個相同,如果 n = a.size() => 輸出endl ,b[i] 中的 i 要加上 a.size() - 1 ,避免重複輸出)
.
.
ana and
如果以上敘述很攏統,在下面附上參考解答
#include <iostream> using namespace std; int main(){ string a , b ; getline( cin , a ) ; getline( cin , b ) ; for( int i = 0 ; i < b.size() ; i++ ) { int I = i , n = 0 ; for( int j = 0 ; j < a.size() ; j++ ) { if( b[I] == a[j] ) n++ ; I++ ; } if( n == a.size() ) { cout << endl ; i += a.size() - 1 ; } else cout << b[i] ; } cout << endl ; return 0; }