C/C++

Помогите решить задачу,код должен выйти не таким сложным,но что то не выходит

Задан текст длиной 250 символов. Напечатать буквы, на которые
начинаются слова в тексте в порядке убывания частот их употребления.
#include < iostream >
#include < map >
#include < sstream >
#include < cctype >
using namespace std;

int main()
{
map < char, int > mapa;
multimap < int, char> mulmapa;
string str, word;
getline(cin, str);
istringstream in(str);
while (in >> word)
if (!mapa.count(toupper(word[0]))) mapa[toupper(word[0])] = 1; else mapa[toupper(word[0])]++;
map < char, int >::iterator iter = mapa.begin();
while (iter != mapa.end())
{
mulmapa.insert(pair< int, char >(iter->second, iter->first));
iter++;
}
multimap < int, char >::iterator iter1 = mulmapa.end();
while (iter1-- != mulmapa.begin()) {
cout << "Litera " << iter1->second << " = " << iter1->first << " times" << endl; iter1;
}
}
Салават Маннанов
Салават Маннанов
51 411
Лучший ответ
Юрий Плиско спасибо большое
#include<stdio.h> //вкл. ввод-вывод
#include<stdlib.h>/*вкл. malloc,
realloc, free, NULL*/
#include<string.h>//вкл. строки
#include<unistd.h>//вкл. паузу

int main()
{
char text[250]={0},
*word, *symbols, *count;
int slen=0;
//создаём массив символов:
symbols=(char*)malloc(sizeof(char));
if(!symbols) exit(1);
printf("Enter your text:\n");
fgets(text,sizeof(text),stdin);
word=strtok(text," ,:;.");

//заполняем динамический массив
//начальными буквами слов:
while(word!=NULL)
{//while
*symbols=*word;
//увеличиваем массив букв на 1:
symbols=(char*)realloc(symbols,(++slen)*sizeof(char));
symbols++;/*увеличиваем позицию в массиве */
//выбираем новое слово в тексте:
word=strtok(NULL," ,:;.");
}//while

symbols-=slen;//переход в начало массива

//создаём массив частот по
//по числу начальных букв слов:
count=(int*)malloc(slen*sizeof(int));
if(!count) exit(1);

//заполняем массив частот
//единичными значениями
//для каждой начальной буквы слова:
for(int i = 0; i < slen; i++)
count[i]=1;

//подсчёт частот использования
//символов в начале слов:
for(int i = 0; i < slen; i++)
{//for i
for(int j = 0; j < slen; j++)
{//for j
if(symbols[i]==symbols[j] && i!=j)
{//if
count[i]++;
symbols[j]='-';//помечаем знаком минус
count[j]=0;//повторяющийся символ
}//if
}//for j
}//for i

//упорядочиваем массивы:
for(int i = 0; i < slen; i++)
for(int j = 0; j < slen; j++)
{
if(count[i]>count[j])
{
count[i]^=count[j]^=count[i]^=count[j];
symbols[i]^=symbols[j]^=symbols[i]^=symbols[j];
}
}
//выводим результат работы:
printf("\nLetter frequency:");
for(int i = 0; i < slen; i++)
if(count[i]>0)
printf("\n %c = %d",symbols[i],count[i]);

free(symbols);//освобождаем
free(count);//память от массивов
fflush(stdout);//сброс буфера для паузы
sleep(5);//пауза
return 0;
}
Разак Адеов
Разак Адеов
37 945
Юрий Плиско спасибо большое, выручили