Zliczanie znaków, wyrazów i zdań

0

Witam, piszę program, który liczy znaki, wyrazy i zdania. Dodatkowo musi sprawdzić jaka długość wyrazów występuję najczęściej oraz na jaką literę zaczyna się najwięcej wyrazów.
Zrobiłem pierwszą część zadania, mam problem z drugą, mógłby mi ktoś pomóc? Mój kod:

#include <string>
using namespace std;
int main ()
{
    string zdanie;
    int ile_znakow=0, ile_zdan=0, ile_slow=1;
    int j=0;
    while(getline(cin, zdanie) && zdanie!=""){
        ile_znakow+=zdanie.size();
        for(int i=0; i<zdanie.size();i++){
        if(zdanie[i]=='?' || zdanie[i]=='.' || zdanie[i]=='!') ile_zdan++;
        if(zdanie[i]==' ' ) ile_slow++;
        }
        j++;
    }
    if(j==0) ile_slow=0; // Gdy w pierwszej lini wpisze sie "", program zwraca 0 bo nie ma tam slowa
    cout << "Ilosc znakow: " << ile_znakow  << endl;
    cout << "Ilosc slow: " << ile_slow << endl;
    cout << "Ilosc zdan: " << ile_zdan  << endl;
    return 0;
}
0

Spróbuj użyć std::map do zliczania długości słów i pierwszych liter wyrazów.

std::map<int,int> word_length;
std::map<char,int> begin_word_letter;
.......
std::map<string,int> words = splitText(...); // dzielimy tekst na wyrazy które następnie wstawiane są do mapy
.......
for( const auto& [word,number] : words )
{
    ++word_length[word.size()];
    begin_word_letter[word[0]] += number;
}
0

Nie pobieraj nic do żadnego bufora.
Napisz funkcje isWordSeparator() oraz isSentenceSeparator()
Wtedy algorytm będzie następujący:

  1. Zainicjalizuj charCount=0,wordCount=0,sentenceCount=0
  2. Zainicjalizuj insideWord=false,insideSentence=false
  3. Dla każdego wczytanego znaku ch wykonaj:
  4. Zwiększ charCount
  5. Jeżeli isWordSeparator(ch) to ustaw insideWord=false w przeciwnym przypadku jeżeli !insideWord to zwiększ wordCount oraz ustaw insideWord=true
  6. Jak wyżej tylko dla Sentence

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