Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C] Program liczący poszeczególne litery w wyrazie

gabryelski 24 Lut 2011 22:09 5333 7
  • #1 24 Lut 2011 22:09
    gabryelski
    Poziom 8  

    Witam,
    Napisałem program , który liczy poszczególne litery w słowie, które się wprowadzi. Program przynosi zamierzony efekt, niestety jest bardzo długi. Czy ktoś mógłby mnie nakierować jak zrobić to krócej? Zamieszczam tylko część kodu. Mam nadzieje , ze widać co wykonałem.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 7
  • #2 24 Lut 2011 22:19
    piki1987
    Poziom 11  

    Poczytaj o reprezentacji liter w programie (kody ascii), wtedy cały program napiszesz za pomocą jednej pętli ;)

    0
  • #3 25 Lut 2011 07:04
    krru
    Poziom 32  

    Musisz sprecyzować co ten program ma robić. Co to jest wyraz (cały wprowadzony tekst czy od separatora do separatora)? Masz po prostu policzyć litery, czy policzyć poszczególne litery - czyli zrobić histogram? Bez precyzyjnych założeń nie da się napisać programu.

    0
  • #4 25 Lut 2011 11:25
    Wizer
    Poziom 10  

    napisałem na szybko taki algorytm:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Definiuję tablice dwu-wymiarową... W pierwszym wymiarze jest zapisywana litera stringa w drugim wymiarze zapisywana ilość wystąpień...

    Nie mam już czasu na komentowanie kodu ale jak sobie wrzucisz w debuggera to połapiesz się co i jak... e.w napisz czego nie rozumiesz to przy chwili wolnego czasu Ci odpiszę...

    Algorytm można pewnie jeszcze lepiej zoptymalizować... jak ktoś wpadnie na ciekawy pomysł to niech się podzieli :P

    0
  • #5 25 Lut 2011 13:00
    krru
    Poziom 32  

    Wizer napisał:
    napisałem na szybko taki algorytm:

    Definiuję tablice dwu-wymiarową... W pierwszym wymiarze jest zapisywana litera stringa w drugim wymiarze zapisywana ilość wystąpień...



    Raczej pasowałaby tablica struktur, ale pomińmy kwestie techniczne. 20 to troche za mało, liter jest 26, a jeszcze wielkie/małe itp.
    Najprościej po prostu zrobić tablicę indeksowaną kodem znaku - to raptem 256 intów.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wstępnie wyzerować i potem inkrementujemy element indeksowany wczytanym znakiem.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Trzeba przypilnować by znak był unsigned.

    0
  • #6 25 Lut 2011 14:40
    przemo_wielki
    Poziom 23  

    Jeżeli ma być jak najprościej to @piki1987 ma rację kod ASCII wystarczy:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ze względu na złożoność (26*strlen(wyraz)) nadaje się to dla małych ciągów(nie ma sensu optymalizować bo wzrost będzie w granicach błędu). W przypadku długich tekstów metoda @Wizer wygląda na lepszą ale też trzeba by ją odpowiednio zoptymalizować.

    0
  • #7 26 Lut 2011 00:31
    piki1987
    Poziom 11  

    W sumie chodziło mi o jeszcze prostsze rozwiązanie:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Edit: tak sobie przypomniałem, że strlen liczy zawsze długość wyrazu, więc lepiej zrobić
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #8 26 Lut 2011 16:59
    H0miczek
    Poziom 20  

    jak juz optymalizowac to zawsze mozna olac strlen i po prostu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0