Zadania C++

0

Witam, mam taki problem.

Wykładowca rzucił na twarz zadania z programowania, których nie mam pojęcia jak zrobić.

Oto dwa z nich:

  1. Napisać program, który dla dowolnego pliku tekstowego input.txt wyznaczy liczbę
    znaków, wyrazów i zdań w nim występujących. Dodatkowo program powinien wyznaczyć
    liczbę wystąpień każdego znaku (litery, cyfry, znaku specjalnego). Wszystkie wyznaczone
    informacje powinny zostać zapisane w pliku output.txt.

  2. Napisać program który w pliku tekstowym input.txt wyszuka wszystkie wystą-
    pienia ciągu znaków x i zapisze w pliku tekstowym output.txt liczbę wystąpień ciągu x,
    oraz miejsca wystąpień pierwszego znaku ciągu x. Na przykład jeżeli w pliku znajduje
    się tekst olo ma samolot, a x=olo, to program powinien podać, że x występuje w tekście
    dwa razy na miejscach 1 i 11. Uwaga: nie wolno używać żadnych funkcji bibliotecznych
    wyszukujących wystąpienia ciągu znaków w tekście.

Czy mógłby ktoś chociaż podpowiedzieć jak to zrobić? Powiedzieć jakich funkcji użyć, przy wyznaczaniu liczby znaków, przy ich porównywaniu, itd?

Z góry dziękuje za pomoc.

2
  1. Najbardziej naiwny sposób: policz ilość kropek i spacji/nowych linii.
  2. Jak nie możesz użyć string::find to użyj equal: http://en.cppreference.com/w/cpp/algorithm/equal
0

Jeżeli w pliku masz normalny tekst bez polskich znaków i jakiś udziwnień to:
liczba znaków = wielkość pliku
liczba wyrazów = ilość spacji
liczba zdań = liczba kropek (tylko musisz sprawdzać czy nie zliczasz tych w wielokropku)

co do zliczania to wystarczy

size_t licznik[128];
char znak = wczytajZPliku(..);
++licznik[znak];
1
  1. Liczba slow. Na pewno nie należny skupiać się wyłącznie na liczbie spacji ponieważ występują również inne białe znaki oddzielające wyrazy jak tabulatory i znaki nowego wiersza itp. W poniższym przykładzie cin szczytuje wszystkie białe znaki i zamienia je na znak NULL dzięki czemu nie pomijam w zliczaniu żadnego słowa.
 #include <iostream>
#include <cstring>

int main()
{
char slowo[30];
int liczba_slow= 0;
int i= 0;
std::cout << "Podaj slowa, kiedy skonczysz napisz \"gotowe\": ";
std::cin >> slowo;
        while(strcmp(slowo, "gotowe"))
         {
             std::cin >> slowo;
             liczba_slow+=1;
         }

std::cout <<"Podano slow " << liczba_slow;
return 0;
}
  1. Zliczanie znaków- Tutaj trzeba użyć pętli while. W poniższym przykładzie używa się metody .get(char), która zlicza również białe znaki- spacje, znaki nowego wiersza itp.
 // 
#include <iostream>
int main()
{
    using namespace std;
    char ch;
    int count = 0;

    cout << "Podawaj znaki; znak # kończy: \n";
    cin.get(ch);        // użycie funkcji cin.get(ch)
    while (ch != '#')
    {
        cout << ch;
        ++count;
        cin.get(ch);    // ponowne użycie
    }
    cout << endl << "wczytano " << count << " znaków\n";
    return 0; 
}

  1. Do zliczania ile jest cyfr, liter itp. najlepiej posłużyć się funkcjami cctype.

A jak przeczytasz rozdział 5 i 6 książki Stephen Prata Szkoła Programowania to zrobisz te zadania w 15min.

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