Go to diff to previous submission
#include<iostream> #include<cstdio> #include<deque> using namespace std; int main ( void ) { int number; string error; char character; while ( cin >> number >> error ) { scanf ( "%c", &character); for ( int i = 0; i < number; i++ ) { int counter = 0; deque <char> stack; while ( 1 ) { scanf ( "%c", &character); if ( character == '\n' ) { break; } if ( character == error [ error . length () - 1 ] ) { stack . push_back ( character ); int index = error . length () - 1; deque<char>::iterator n; int i = 0; for ( n = stack . end (), i = ( (int) ( stack . size () ) - 1 ); n != stack . begin (); n--, i-- ) { //cout << stack [i] << " " << error [index] << endl; if ( stack [i] == error [index] ) { // cout << "shoda na " << error [index] << endl; if ( index == 0 ) { deque<char>::iterator x; for ( x = n; x <= ( n + error . length () - 1 ); x++ ) stack . erase ( x ); break; } index--; } else break; } } else stack . push_back ( character ); counter++; } if ( !counter ) { cout << endl; continue; } for ( int i = 0; i < ( int ) stack . size (); i++ ) cout << stack [i]; cout << endl; } } }
--- c4.s981.cteam017.bugs.cpp.0.bugs.cpp +++ c4.s1181.cteam017.bugs.cpp.0.bugs.cpp @@ -1,4 +1,5 @@ #include<iostream> #include<cstdio> +#include<deque> using namespace std; @@ -8,5 +9,4 @@ int number; string error; - string line; char character; @@ -18,5 +18,5 @@ int counter = 0; - line . clear (); + deque <char> stack; while ( 1 ) @@ -27,6 +27,36 @@ break; } + - line . push_back ( character ); + if ( character == error [ error . length () - 1 ] ) + { + stack . push_back ( character ); + int index = error . length () - 1; + deque<char>::iterator n; + int i = 0; + for ( n = stack . end (), i = ( (int) ( stack . size () ) - 1 ); n != stack . begin (); n--, i-- ) + { + //cout << stack [i] << " " << error [index] << endl; + if ( stack [i] == error [index] ) + { + // cout << "shoda na " << error [index] << endl; + if ( index == 0 ) + { + deque<char>::iterator x; + for ( x = n; x <= ( n + error . length () - 1 ); x++ ) + stack . erase ( x ); + + break; + } + + index--; + } + else + break; + } + + } + else + stack . push_back ( character ); counter++; @@ -39,16 +69,8 @@ } - while ( 1 ) - { - string::size_type n; - - n = line . rfind ( error.c_str() ); - if ( n == string::npos ) - break; - - line . erase ( n, error . length () ); - - } - cout << line << endl; + + for ( int i = 0; i < ( int ) stack . size (); i++ ) + cout << stack [i]; + cout << endl; } }