prosty kod, getline

0

Hej mam problem z dość łatwym wydawałoby sie kodem.

biblioteki iostream, string, fstream
fstream plik; string linia; 
 plik.open("dane.txt", ios::in);
    while(getline(plik,linia))
    {
        cout<<linia<<endl;
    }
    for(int i=1; i<linia.size(); i++)
    {
        if(linia[i]==';') licznik++;
    }
    cout<<"srednikow w tym pliku jest: "<<licznik;
    plik.close();

w pliku jest bodajże, 9 średników a wyświetla okrągłe zero ;> Jakieś sugestie? Może być też błąd w moim myśleniu.
Pozdrawiam

2
    while(getline(plik,linia))
    {
        cout<<linia<<endl;
        for(int i=0; i<linia.size(); i++)
        {
            if(linia[i]==';') licznik++;
        }
    }

Badałeś tylko jedną (ostatnią) linię, w dodatku od drugiego znaku, a nie pierwszego.

1

Ja bym wrzucił pętle for do pętli while. Zauważ że sprawdzasz liczbę średników tylko z ostatniej lini.

Tak jak post wyżej, dokładnie to miałem na myśli.

2
 while(getline(plik,linia)) // odczytujesz i wypisujesz wszystkie linie 
    {
        cout<<linia<<endl;
    } // tutaj zmienna `linia` zawiera ostatni wczytany wiersz, bo co pętla jest nadpisywany
    for(int i=1; i<linia.size(); i++) // tutaj sprawdzasz tylko ostatnią linię. przenieś to pętli while i tam szukaj wystąpień średnika
    {
        if(linia[i]==';') licznik++;
    }

Do szukania znaku korzystaj z gotowych funkcji std::string, tj. find np.

1

Dlaczego liczysz średniki, kiedy już skończyłeś czytać plik?

fstream plik; string linia; 
plik.open("dane.txt", ios::in);

int licznik = 0;
while(getline(plik,linia)) {
   cout<<linia<<endl;
   for(int i=0; i<linia.size(); ++i) {
     if(linia[i]==';') 
       licznik++;
    }
  }
  cout<<"srednikow w tym pliku jest: "<<licznik;
  plik.close();
0

Faktycznie.
Dziękuje za pomoc :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.