czy wyrazy mają parzystą lub nieparzystą liczbę znaków

0

Cześć! Mam za zadanie przygotować 1) kod który policzy i wyświetli liczbę linii w pliku inf.txt, oraz 2) żeby wyświetlił w kolejnych liniach czy wyraz ma parzystą czy nieparzystą liczbę znaków. Pierwszy punkt mam zrobiony, jednak w 2 punkcie mam błąd w kodzie, mianowicie gdy uruchamiam liczba linii wyświetla się w nieodpowiedniej kolejności, i czasami gdy wyraz ma parzystą liczbę znaków, wyświetla się że ma nieparzystą. Oraz pętla z sprawdzeniem czy wyraz ma parzystą liczbę znaków wykonuje się więcej razy niż ilość linijek w pliku. Nie wiem jak to rozwiązać, czy mógłby mi ktoś pomóc?
Kod:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
fstream plik;
string slowo;
string linia;
int policz=0;

plik.open("inf.txt", ios::in);
if(plik.good()==true)
{
	while(!plik.eof())
	{
        getline(plik, linia);
        policz++;
           
        for(int i=0; i<=policz; i++)
        {
        if(slowo.length()%2==0)
        {
        	cout<<"Slowo w "<<i<<" linii ma parzysta liczbe znakow"<<endl;
		}
		else
		{
			cout<<"Slowo w "<<i<<" linii nie ma parzysta liczbe znakow"<<endl;
		}
		}
        	
	}
	plik.close();
}
cout<<"Jest "<<policz<<" linii"<<endl;	
return 0;

}

3

Zobacz jak masz zagnieżdżone pętle. Dla pierwszej linii for(int i=0; i<=policz; i++) się wykona raz, dla drugiej dwa (bo już dwukrotnie zwiększyłeś policz), itd.

Jak już przyjąłeś linię, to możesz ją obrobić, nie musisz do tego w ogóle osobnej pętli puszczać.

2

"... wyświetlił w kolejnych liniach czy wyraz ma parzystą czy nieparzystą liczbę znaków ..."

Jaki wyraz?
Co ma linia do tego wyrazu?
Ja widzę sam nie rozumiesz tego i sprawdzasz ilość znaków w niezainicjalizowanej zmiennej slowo

0

@Althorion: dziękuję, teraz dobrze wyświetla się ilość linii, tylko za każdym razem jest napisane że słowo ma parzystą liczbę znaków.

0

A co to jest u Ciebie slowo? Bo w kodzie, który zamieściłeś, jest to pusty string, któremu nic nie przypisujesz — pusty, więc o długości zero, więc o długości parzystej.

1
  1. Wczytaj plik, jest
  2. Getline, jest
  3. Inkrementacja liczby lini, jest
  4. Pętla for nie potrzebna
  5. nie slowo a linia.legth() chyba że w wierszu masz wiele słów i rozbijasz to po np. białych spacjach?
2

Masz strasznie przekombinowane!

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

int main()
{
	static const char *StrInvBool[]={"","nie"};
	ifstream fin("inf.txt");
	size_t count=0;
	for(string line;getline(fin,line);++count)
	{
		cout<<"Wiersz "<<(count+1)<<" zawiera "<<StrInvBool[line.size()&1]<<"parzysta liczbe znakow"<<endl;
	}
	cout<<"Jest "<<count<<" linii"<<endl;  
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1