zliczanie literek - algorytm?

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

0

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

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;
}
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.

0

Dzięki, pomogło:)

0

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

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.

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.

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;
}

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