Назад | Начало урока | Вперед
Содержание

Глава 2

Убираем чердак, подвал и середину
///////////
2-й вариант
То же, что предыдущее, но в дополнение убирает еще фрагмент из середины текста.
Программа убирает и чердак, и подвал, и середину!
Это то, что мне надо!


//Работа с файлами и строками
//
#include <fstream>
#include <string>
#include <iostream>
using namespace std;

int main( int argc,char* argv[]) {

string str = "<h2>"; // лексема для поиска
string str2 = "<table"; // лексема для поиска
string str3 = "<div style"; // лексема для поиска
string str4 = "<center>"; // лексема для поиска
string tmp;
string s1;
//------------------
//введем флаги
bool f_01 = false;
bool f_02 = false;
bool f_03 = false;
bool f_04 = false;

//---------------------------------------
char fileTo[100] ="fileTo.txt";
char fileFrom[100] ="fileFrom1.txt";

ifstream from1("fileFrom.txt");//открываем файл для считывания if(!from1) {

cout<<"Vhodnoi fail ne naiden:" ;
return (1);
}
ofstream to2("fileTo.txt", ios::trunc);// стираем все, что было в файле
to2.close();

ofstream to1("fileTo.txt", ios::app);//открываем файл для записи if(!to1) {

cout<<"Vyhodnoi fail ne otkryt:" ;
return (1);
}
//-----------------------------------------
//главный цикл while (!from1.eof()) {
getline(from1,tmp,'\n');//считываем построчно в строку tmp
int n = 0;

//-----------------------------------------------------------
//убираем чердак
while(1 != tmp.empty() && f_01==false ) {//если строка не пуста

s1 = tmp;
n = tmp.find(str); // найдем позицию вхождения

// если лексемы в строке нет, то
// выйдем из цикла, чтобы прочесть следующую строку
if(n==-1) {

break;
}
// если лексема есть
if(n>0) {
s1.erase(0, n ); //левее n все отсекаем
tmp = s1;
f_01 = true;
}
}//end while

if(f_01==false) continue;

//-----------------------------------------------------------
// убираем середину 1
while(1 != tmp.empty() && f_02==false) {//если строка не пуста

s1 = tmp;
n = tmp.find(str2); // найдем позицию вхождения

// если лексемы в строке нет
if(n==-1) {

to1<< tmp << endl;
break;
}
// если лексема есть
if(n>0) {
s1.erase(n, tmp.length() ); //правее n все отсекаем
tmp = s1;
to1<< tmp << endl; // копируем строку до лексемы
f_02 = true;
}
}//end while

if(f_02==false) continue;

//-----------------------------------------------------------
//убираем середину 2
while(1 != tmp.empty() && f_03==false ) {//если строка не пуста

s1 = tmp;
n = tmp.find(str3); // найдем позицию вхождения

// если лексемы в строке нет, то
// выйдем из цикла, чтобы прочесть следующую строку
if(n==-1) {

break;
}
// если лексема есть
if(n>0) {
s1.erase(0, n ); //левее n все отсекаем
tmp = s1;
f_03 = true;
}
}//end while

if(f_03==false) continue;

//-----------------------------------------------------------
// убираем подвал
while(1 != tmp.empty() && f_04==false) {//если строка не пуста

s1 = tmp;
n = tmp.find(str4); // найдем позицию вхождения

// если лексемы в строке нет
if(n==-1) {

to1<< tmp << endl;
break;
}
// если лексема есть
if(n>0) {
s1.erase(n, tmp.length() ); //правее n все отсекаем
to1<< s1 << endl; // копируем строку до лексемы
f_04 = true;
}
}//end while
} //end while главный цикл
to1.close();
from1.close();

return 0;

}


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz