Praca z plikami tekstowymi - zliczanie danego znaku

0

Cześć wszystkim szukam najkrótszego możliwego kodu do szukania znaków w tekście z pliku .txt

Wymyśliłem coś takiego (ale to nie działa zawsze jest 0):

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

using namespace std;


int pp(char znak_szukany=';')
{
    ifstream plik;
    string linia;
    int licznik;
    plik.open("tekst.txt");
    if(!plik.good())
    {
        cout << "\nNie ma pliku!";
        plik.close();
        return 0;
    }
    plik >> linia;
    for(int i=0;i<linia.length();i++)
    {
        if(linia[i]==znak_szukany)
            licznik++;
    }
    plik.close();
    return licznik;
}



int main()
{

cout << pp()  ;
}

rozkmniałem też nad scanf, ale tutaj to nawet program się nie kompilował.
Proszę o pomoc, jakieś rady wskazówki.

1

int licznik; - brak inicjalizacji zmiennej, masz UB. Inicjalizuj zmienne.

plik >> linia; Wczytujesz słowo, nie linię. Jak chcesz linię, to użyj getline. Albo wczytuj znak po znaku skoro i tak liczysz znaki.

0

Mówicie do mnie takimi słowami, że ja serio nawet lekko nie zostałem oświecony. Od poniedziałku dopiero ruszyłem programowanie, dopiero zaczynam dział z funkcjami

1

Których słów nie rozumiesz? Pytam serio, bo wydawało mi się, że pisałem perfekcyjnie zrozumiałym językiem.

W każdym razie, tutaj masz przykładowe rozwiązanie w C++:

auto main() -> int
{
    ifstream f("all.hpp");

    auto semicolons = std::count(std::istream_iterator<char>(f), {}, ';');
    DBG(semicolons);
}

https://wandbox.org/permlink/9HFEQfEeA6gDSI28

0

Dzięki działa!

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

using namespace std;

int pp(char znak_szukany=',')
{
    ifstream plik;
    string linia;
    int licznik=0;
    plik.open("tekst.txt");
    getline(plik,linia);

    for(int i=0;i<linia.length();i++)
    {
        if(linia[i]==znak_szukany)
            licznik++;
    }
    plik.close();
    return licznik;
}

int main()
{

cout << pp() ;
}


0

Działać działa, z tą różnicą, że kod od @kq zlicza wystąpienia danego znaku w całym pliku a Twój kod bierze pod uwagę tylko pierwszą linijkę.

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