Глава 02 (продолжение 1)
Вверх
Программа построчно считывает из текстового файла, затем в строке ищет подстроку (лексему). Найдя лексему, программа вставляет перед каждой найденной лексемой новую строку. И разыскиваемая лексема и новая строка для вставки переданы программным способом (заданы программно до компиляции).
Программа 02_01
using namespace std;
void fun1(string str, string str1, string tmp, ofstream &to1) {
while(1 != tmp.empty() )
{
n = tmp.find(str); // найдем позицию вхождения
if(n==-1)
{
if(n>=0)
{
to1<< s1 ;
tmp.erase(0, str.length() );
if( 1==tmp.empty())
{
char fileTo[100] ="fileTo.txt";
ifstream from1("fileFrom.txt");//открываем файл для считывания
ofstream to1("fileTo.txt");//открываем файл для записи
while (!from1.eof())
{
getline(from1,tmp,'\n');//считываем построчно в массив buf
fun1(str, str1, tmp, to1) ;
return 0;
Основную работу в этой программе выполняет функция fun1().
Функция имеет 4 параметра
void fun1(string str, string str1, string tmp, ofstream &to1) {
Параметр str - это подстрока (лексема), которую надо отыскать в строке.
Объявим локальные переменные:
Возьмем в работу переданную исходную строку tmp. В цикле while, пока строка не пустая
найдем в ней позицию вхождения разыскиваемой лексемы, которая передана в параметре str.
n = tmp.find(str); // найдем позицию вхождения
if(n==-1)
{
if(n>=0)
{
to1<< s1 ; // строка до лексемы
tmp.erase(0, str.length() ); //удалим лексему
Если лексем в строке больше нет, завершим строку
Поиск лексемы и вставка строки
// Example_02_01 Поиск лексемы и вставка строки
#include <fstream>
#include <string>
#include <iostream>
int n = 0;
break;
tmp.erase(0, n ); //левее n все отсекаем
to1<< str1 ;
to1<< str ;
to1 << endl;
continue;
int main( int argc,char* argv[])
{
string str = "Алексей Васильевич";
string str1 = " Уважаемый ";
string tmp;
string s1;
char fileFrom[100] ="fileFrom1.txt";
if(!from1)
{
return (1);
if(!to1)
{
return (1);
to1.close();
from1.close();
Анализ:
Параметр str1 - это новая строка, которую надо вставить в исходную строку.
Параметр to1 - файловый поток, в который будет передана результирующая строка.
Параметр tmp - исходная строка, которую надо обработать.
string s1;
int n = 0;
while(1 != tmp.empty() )
{
break;
tmp.erase(0, n ); //левее n все отсекаем
to1<< str1; // новая строка
to1<< str ; // лексема
to1 << endl;
continue;