plik tekstowy c++

damcios
Użytkownik
Użytkownik
Posty: 341
Rejestracja: 3 lis 2008, o 19:55
Płeć: Mężczyzna
Lokalizacja: poznań
Podziękował: 1 raz

plik tekstowy c++

Post autor: damcios »

mam problem z napisaniem programu, który wczyta plik tekstowy , wypisze na ekran linie o parzystej liczbie znaków i usunie z nej parzyste słowa.
napisałem coś takiego

Kod: Zaznacz cały

ifstream plik ("tekst.txt");
string name,s;
int dl,x;
while(!plik.eof()){for (int i=1;i<=3;++i){
getline(plik,name);
dl=name.length();
if(dl%2==0){
plik>>s;
x=s.length();
if(x%2==0){
cout<<endl;
}}
else{
cout<<s;}
}
Ostatnio zmieniony 25 kwie 2011, o 12:12 przez Afish, łącznie zmieniany 1 raz.
Powód: Brak znaczników code.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

plik tekstowy c++

Post autor: soku11 »

Ja bym to napisał nieco bardziej zrozumiale, tj:

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;

unsigned int countNonWhitespaceChars(const string& line)
{
	unsigned int charsCount = 0;
	for(size_t i = 0; i < line.length(); ++i)
	{
		if(isspace(line[i]) == false)
		{
			++charsCount;
		}
	}

	return charsCount;
}

bool isEven(unsigned int number)
{
	return (number % 2 == 0);
}

string removeEvenWordsFromLine(const string& line)
{
	istringstream buffer(line);

	ostringstream result;
	string word;
	unsigned int counter = 0;
	while(buffer >> word)
	{
		if(isEven(counter) == false)
		{
			result << word << " ";
		}
		++counter;
	}

	return result.str();
}

int main()
{
	ifstream file("main.cpp");
	string line;
	while(getline(file, line))
	{
		if(line.empty() == false && isEven(countNonWhitespaceChars(line)))
		{
			cout << line << ": " << removeEvenWordsFromLine(line) << "
";
		}
	}
	file.close();
	return EXIT_SUCCESS;
}
ODPOWIEDZ