Got a program code so far to:

#include <string>
#include <fstream>
#include <iomanip>
#include <iostream>

using namespace std;
//----------------------------------------------------------------------------
const char Cdat[] = "Data.txt";
const char Crez[] = "Rezult.txt";
const char Canalyzis[] = "Analyzis.txt";

//----------------------------------------------------------------------------
void TrimmText(const char dfv[], const char rfv[], const char afv[]);
void AnalyzeLine(string &lin, string & TwoNumeral, int & TwoStart,
					  unsigned int & TwoSum);
void EditLine(string &lin, int TwoStart, int TwoSum);

int main()
{
	TrimmText(Cdat, Crez, Canalyzis);
}
//----------------------------------------------------------------------------
// Text reading by line
// dfv - original text data file name, rfv - edited text data file name
// afv - analyzis data file name
void TrimmText(const char dfv[], const char rfv[], const char afv[])
{
	string TwoNumeral;
	int TwoStart;
	unsigned int TwoSum;
	ifstream fd(dfv);
	ofstream fr(rfv);
	ofstream fa(afv);
	string L;
	fa << "---------------------------\n";
	fa << "| Word | Start |  Sum |\n";
	fa << "---------------------------\n";
	while(!fd.eof()) 
	{
		getline (fd, L);
		{
			AnalyzeLine(L, TwoNumeral, TwoStart, TwoSum);
			fr << L << endl;
			if (TwoSum <= 9 && TwoSum != 0) 
			{
				fa << "| " << left << setw(5) << TwoNumeral << " | "
					<< right << setw(7) << TwoStart;
				fa << " | " << setw(5) << TwoSum << " |\n";
			}
		}
	}
	fa << "---------------------------\n" << endl;
	fd.close();
	fd.close();
	fa.close();
}
//----------------------------------------------------------------------------
// Function which finds words that are made of two numerals and its sum
// lin - line, in which search is being made
// TwoNumeral - word which is made of two numerals
// TwoStart - return its start
// TwoSum - returns its numerals sum
void AnalyzeLine(string &lin, string & TwoNumeral, int & TwoStart, unsigned int & TwoSum)
{
	string Skirt = " .,!?:;()\t";
	string Numbers = "0123456789";
	string Word;
	int zpr = 0, zpb = 0;
	int skaiciukai[2];
	char skirstymas[2];
	TwoNumeral = "";
	TwoStart = 0; TwoSum = 0;
	while ((zpr = lin.find_first_not_of(Skirt, zpb)) != string::npos) 
	{
		zpb = lin.find_first_of(Skirt, zpr);
		Word = lin.substr(zpr, zpb - zpr);
		if(Word.length()==2 && !Word.find_first_of(Numbers,0))
		{
			TwoNumeral = Word;
			TwoStart = zpr;
			skirstymas[0]=Word[0];
			skirstymas[1]=Word[1];
			char sk1=skirstymas[0];
			char sk2=skirstymas[1];
			skaiciukai[0]=atoi(&sk1);
			skaiciukai[1]=atoi(&sk2);
			TwoSum = skaiciukai[0]+skaiciukai[1];
			if (TwoSum <= 9 && TwoSum != 0)
			{
				EditLine(lin, TwoStart, TwoSum);
			}
		}
	}
}
//----------------------------------------------------------------------------
// function which deletes words that are made of two numerals and which sum is less or equal to 9
// lin - line, which is being changed
// TwoStart - the start of word made of two numerals

void EditLine(string & lin, int TwoStart, int TwoSum)
{
	string Numbers = "0123456789";
	if (Numbers.find_first_of(lin[TwoStart]) != string::npos) 
		{
			lin.erase(TwoStart, 2);
		}
}

I need it to delete words that are made of two numerals and which sum is less or equal to 9. (basicaly if its 18/15/71 it deletes that word, if its 91 it wont because its more than 9). Think im pretty much done getting program to do so, theres a problem - If there's more than 1 word that meets my criteria in single line, program returns only last word from that line to analyzis.txt while i need it to return every single one of it.. Any ideas?

Heres data file example:

Ne vieno antikos 18 autorių veikaluose 17 esama likę 567 nupasakojimų,
 kaip kvapiosios substancijos keliavo 1900 mylių aplink Viduržemio jūrą.
 
        ****  14  12  13 99 125 ***
 
  Iš šių 105 įvairių aprašymų matyti, jog Egiptas, ypač faraonų laikais,
  
  
   05 labai daug *** 76 kvapiųjų substancijų (kai kurių nūdienos  10 archeologų

 skaičiavimais gal net  **** 80 %) 01 atsigabendavo iš tolimų ir ne tokių  tolimų kraštų: iš Arabijos, iš Viduržemio jūros 
 55 salų – Kipro, Chijo ir Kretos, iš Nilo aukštupio. 
 Ypač 333 kvepalų importas 22 Egipte suklestėjo XIII a. pr. m. e, kai šalį valdė Ramzis Didysis.

Rezults file:

Ne vieno antikos  autorių veikaluose  esama likę 567 nupasakojimų,
 kaip kvapiosios substancijos keliavo 1900 mylių aplink Viduržemio jūrą.
 
        ****       99 125 ***
 
  Iš šių 105 įvairių aprašymų matyti, jog Egiptas, ypač faraonų laikais,
  
  
    labai daug *** 76 kvapiųjų substancijų (kai kurių nūdienos   archeologų

 skaičiavimais gal net  ****  %)  atsigabendavo iš tolimų ir ne tokių  tolimų kraštų: iš Arabijos, iš Viduržemio jūros 
 55 salų – Kipro, Chijo ir Kretos, iš Nilo aukštupio. 
 Ypač 333 kvepalų importas  Egipte suklestėjo XIII a. pr. m. e, kai šalį valdė Ramzis Didysis.

Analyzis file:

---------------------------
| Word | Start |  Sum |
---------------------------
| 17    |      37 |     8 |
| 25    |      24 |     7 |
| 10    |      64 |     1 |
| 01    |      33 |     1 |
| 22    |      27 |     4 |
---------------------------

also if i put 01 in front of 125 in data file, I get **** 99 1 *** in rezults file which shouldnt happen.

77 eiluteje !Word.find_first_of(Numbers,0)) ar neturetu buti != string::npos ?
beje c++ standarte yra biblioteka vadinama cctype kurioje rasi funkcija std::isdigit

Na nezinau, tuomet dar maziau rezultatu grazina i analizes faila, o del std::isdigit tai abejoju ar kazka tokio 'sudetingo' man reikia kisti i sia programa

38 eiluteje yra tavo klaida,kiek prisimenu sios eof() funckcijos negalima naudoti cikle, geriau naudok sia funkcija good() arba while(getline (fd, L))

Jo sita jau supratau ir pataisiau, taciau vistiek man i analizes faila grazina is tos pacios eilutes tik paskutini zodi kuris atitinka kriterijus,

This article has been dead for over six months. Start a new discussion instead.