Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zliczanie częstości występowania znaków

Ostatnio zmodyfikowano 2009-01-05 19:47
Autor Wiadomość
snake_yaro
Temat założony przez niniejszego użytkownika
Zliczanie częstości występowania znaków
» 2009-01-05 18:50:59
Witam. Mam do napisania program o podanej treści:

Napisz program zliczajacy czestosc wystepowania wszystkich znaków w podanym tekscie łacznie ze
znakami interpunkcyjnymi i przestankowymi oraz białymi znakami (spacja, tabulacja). Wyswietl liste znaków
poczawszy od najczesciej wystepujacych ze wskazaniem liczby wystapien oraz liczba wszystkich znaków. Do
wykonania całosci zadania wykorzystaj metode sortowania przez zliczanie.

Kod, który przedstawiam pozwala na obliczanie ilości wyrazów z danego zdania wraz z miejscem występowania (indeksem). Pytanie dotyczy możliwości przerobienia poniższego programu, aby działał zgodnie z wytycznymi treści powyżej. Dziękuję za jakąkolwiek pomoc.

C/C++
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <string.h>

using namespace std;



void zliczanie( int tab[], int n, int zakres )
{
    int * licznik = new int[ zakres ];
    for( int i = 0; i < zakres; i++ ) licznik[ i ] = 0;
   
    for( int i = 0; i < n; i++ ) licznik[ tab[ i ] ] ++;
   
    int j = 0;
    for( int i = 0; i < zakres; i++ )
         while(( licznik[ i ] -- ) > 0 ) tab[ j++ ] = i;
   
    delete[] licznik;
    return;
}

void wyswietlanie( int tab[], int n )
{
    for( int i = 0; i < n; i++ )
         cout << setw( 4 ) << tab[ i ];
   
}



int podzial( char zdanie[], int wyrazy[] ) //zwraca liczbe wyrazow
{
    int liczba = 0; //liczba znalezionych wyrazow
    if( zdanie[ 0 ] == '\0' )
    {
        return( liczba );
    } //kontrola czy zdanie puste
    int poczatek = 0; //fl_pocz (0-szuka pocz.) (1-szuka konca)
    int dlugosc = strlen( zdanie );
    for( int i = 0; i < dlugosc; i++ )
    if(( zdanie[ i ] != '\t' ) &&( zdanie[ i ] != ' ' ) )
    {
        if( poczatek == 0 )
        {
            poczatek = 1;
            wyrazy[ liczba++ ] = i;
        }
    }
    else
    {
        zdanie[ i ] = '\0';
        poczatek = 0;
    }
    return( liczba );
}

int main( int argc, char * argv[] )
{
   
    char zdanie[ 100 ];
    int wyrazy[ 200 ], liczba;
   
    cout << "Wprowadz zdanie: " << endl;
    cin.getline( zdanie, sizeof( zdanie ) );
    cout << "Twoje zdanie: " << zdanie << endl;
    liczba = podzial( zdanie, wyrazy );
    for( int i = 0; i < liczba; i++ )
   
         cout << "wyrazy " << i + 1 << " na pozycji " << wyrazy[ i ] << " to " << &( zdanie[ wyrazy[ i ] ] ) << endl;
   
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
P-3447
pekfos
» 2009-01-05 18:54:44
daj kod w [.code src="C++"][/code]
(tylko bez tej kropki przed 'code src')
to wszystkim będzie łatwiej go zrozumieć
P-3448
snake_yaro
Temat założony przez niniejszego użytkownika
» 2009-01-05 19:01:13
pefkos - dzięki za radę, podejrzewam, że Pan Pietrzuch uprzedził nas wszystkich poprawiając mojego posta. (:
P-3449
lynx
» 2009-01-05 19:47:50
Tak to ja dałem jako kod. :) Znalazłem coś:
sortowanie przez zliczanie
Może Ci coś pomoże.
P-3451
« 1 »
  Strona 1 z 1