zliczanie literek - algorytm?

Odpowiedz Nowy wątek
2011-07-21 02:29
Lubie cycki:)
0

Witam.
Znacie jakiś szybki algorytm, ktory zliczałby mi literki w wyrazie i układał w porządku alfabetycznym?
np. Mama ma okres
a=3, e=1, k=1, m=2, o=1, s=1, r=1, M=1

Pozostało 580 znaków

2011-07-21 03:09
szybki jak Adam B.
2011-07-21 07:20
bo
0

W jakim alfabecie 'M' jest po 's'?

Zrobił tak, że najpierw są małe litery, a potem duże.. - xeo545x39 2011-07-21 11:22
Wiem, ale pisał o porządku alfabetycznym, jednocześnie rozróżniał 'm' i 'M'. To są dwa różne zagadnienia: porządek alfabetyczny i (chyba) porządek wg kodów ASCI. - bogdans 2011-07-21 13:02

Pozostało 580 znaków

2011-07-21 09:25
1
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
    string s;
    char temp;
    int a,b;
    cout<<"Podaj wyraz: "; 
    cin>>s;
    for(unsigned int i=0; i<s.length()-1; i++)
    {
        for(unsigned int j=0; j<s.length()-1; j++)
        {
            a = (int)s[j];
            b = (int)s[j+1];
            if(a>b)
            {
                temp=s[j];
                s[j]=s[j+1];
                s[j+1]=temp;
            }
        }
    }
    cout<<"Dlugosc wyrazu = "<<s.length()<<endl;
    cout<<"Wyraz z posortowanymi literami: "<<s;
    return 0;
}

Pozostało 580 znaków

2011-07-21 09:48
1

Witam,

Niestety rozwiązanie wyżej będzie działać tylko w przypadku pojedynczych wyrazów, żeby zadziałało na całe zdania należy zmienić linijkę

cin >> s; 
na
getline(cin, s);
 

Dalej żeby dobrze pokazywało ilość liter będzie trzeba się pozbyć spacji i wszystkich znaków interpunkcyjnych. Na końcu łatwo już policzyć ile jest poszczególnych znaków.


Jeśli potrzebujesz pomocy, śmiało pisz GG#27355
Realizuje zlecenia w C/C++/C#, JAVA, Pascal, JS
Kurs ABAP Programista ABAP
sory, ale podałem tak, ponieważ wyraźnie pisał "w wyrazie" ;] - ujemny 2011-07-21 12:00
wiem, ale później jako przykład podawał "mama ma okres" ;-) - Hixohe 2011-07-21 13:37
Stosowanie getline wymusza robienie filtru dla znaków białych. Nie lepiej po prostu użyć tu while ( cin >> s ) { ... }, hę ? - Krasty 2011-07-27 19:07

Pozostało 580 znaków

2011-07-21 11:27
Lubie cycki:)
0

Dzięki, pomogło:)

Pozostało 580 znaków

2011-07-21 13:05
0

Zadanie jeszcze nie jest rozwiązane. Jak wpiszemy "wyraz" sśŚdD, to program wypisze ŚśDds. Zupełnie nie przypomina to porządku alfabetycznego.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2011-07-21 13:22
0

"Zwykłe" porównanie większy/mniejszy będzie się różnie (w zależności od kompilatora i kodowania) zachowywać dla polskich znaków. Opracuj własne porównanie, np. jako funkcję zwracającą 1, -1 lub 0 (większe, mniejsze, równe) i wywołuj w miejscu if (a > b) w postaci if (porownaj(a, b) == 1.

Pozostało 580 znaków

2011-07-27 00:08
Lubie cycki :)
0
#include<iostream>
#include<cstring>
using namespace std;
 
main(){
    short w, znak[255];
    string text;
    for(short i = 32; i <= 122; i++) znak[i] = 0;
    cin >> w;
    getline(cin, text);
    for(short i = 0; i < w; i++){
               getline(cin, text);
               for(short j = 0; j < text.length(); j++)
                         znak[(int)text[j]]++;
    }
    for(short i = 97; i <= 122; i++){
              if(znak[i]==0 || char(i)==' ') continue;
              else cout << char(i) << " " << znak[i] << endl;
    }
    for(short i = 65; i <= 90; i++){
              if(znak[i]==0 || char(i)==' ') continue;
              else cout << char(i) << " " << znak[i] << endl;
    }  
};                        

Ma ktoś pomysł na zgrabniejszy i jędrniejszy algorytm? Pozdro.

Pokaż pozostałe 2 komentarze
U mnie się kompiluje, ale program nic nie robi. Dlatego w poniższym poście zaproponowałem inny program, też nie nie robi ale jest prostszy. - bogdans 2011-07-27 12:20
to się NIE POWINNO kompilować według standardu C++. jesli się kompiluje to tym gorzej dla kompilatora. - Azarien 2011-07-27 12:33
Poinformowałem o tym mój kompilator, zawstydził się. - bogdans 2011-07-27 12:56
@Azarian zapraszam do lektury, polecam zacząć od pozycji całkiem podstawowej (dobre wydanie Grebosza). - Lubie cycki :) 2011-07-27 13:00
@Lubie cycki :): to Ty się mylisz. C++ nie dopuszcza czegoś takiego jak domyślny zwracany typ. Treść błędu w MSVC++: "error C4430: missing type specifier - int assumed. Note: C++ does not support default-int". Dodatkowo masz tam warning: "warning C4018: '<' : signed/unsigned mismatch" - byku_guzio 2011-07-27 17:25

Pozostało 580 znaków

2011-07-27 08:25
ciekawy
0

A co ten program robi? Podobny efekt (ale prościej, bez konieczności naciskania Ctrl-C) uzyskuję bardziej zwartym programem

int main()
{
    return 0;
}

Pozostało 580 znaków

2011-07-27 11:51
0

Podaje link do treści zadania https://pl.spoj.pl/problems/JZLICZ/
Jak ktoś ma lepszy algorytm, to fajnie gdyby się nim podzielił :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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