Форум программистов, компьютерный форум CyberForum.ru

Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) - C++

Восстановить пароль Регистрация
 
learning
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 19
30.04.2013, 18:16     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) #1
Составить программу, которая позволяет ввести текст, а потом печатает первые буквы слов в порядке убывания частоты их употребления. Слово считать последовательностью символов заключенных между пробелами. Если не программу то хоть совет как это организовать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 18:16     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления)
Посмотрите здесь:

Расположить в массиве числа в порядке убывания частоты встречаемости чисел C++
сделать первые буквы слов в строке заглавными C++
C++ В последовательности слов найти и поменять местами пару слов, у которых первые 3 буквы одного совпадают с последними 3 буквами другого
Строка: Как расположить буквы в первом массиве, который типа char, в порядке убывания или возрастания частоты появления букв в тексте? C++
C++ Перевести первые буквы слов в верхний регистр
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
30.04.2013, 21:09     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) #2
learning, как-то так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
 
#define IDX 97
#define JDX 65
 
int _tmain(int argc, _TCHAR* argv[])
{
    string line;
    string::size_type pos(0);
    vector<pair<char, int> > coll;
 
    cout << "Enter text: ";
        getline(cin, line, '\n');
 
    for(int i = 'a'; i <= 'z'; ++i)
        coll.push_back(make_pair(i, 0));
 
    int value;
    string word;
    istringstream ii(line);
 
    while(ii >> word){
        if(isupper(word[0]))
            value = word[0] - JDX;
        else
            value = word[0] - IDX;
 
        ++coll[value].second;
    }
 
    sort(coll.begin(), coll.end(), [](pair<char, int> op1, pair<char, int> op2)
        {
            return op1.second > op2.second; 
        });
 
    for_each(coll.begin(), coll.end(), [](pair<char, int> op)
        {
            cout << op.first << ": " << op.second << endl;  
        });
 
    cout << "\n\n";
    return 0;
}
learning
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 19
30.04.2013, 22:45  [ТС]     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) #3
а можно некоторые комментарии, хочу сам получше понять. если не сложно

Добавлено через 6 минут
просто дело в том что я немного не этот си изучаю
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
30.04.2013, 22:52     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) #4
learning,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
 
#define IDX 97          
#define JDX 65
 
int _tmain(int argc, _TCHAR* argv[])
{
    string line;                    //наша исходная строка
    string::size_type pos(0);           //беззнаковый тп для индекса в строке
    vector<pair<char, int> > coll;      //пара: символ и кол-во повторов
 
    cout << "Enter text: ";
        getline(cin, line, '\n');           //вводим исходную строку
 
    for(int i = 'a'; i <= 'z'; ++i)         //составляем вектор из пар символов и счетчиков
        coll.push_back(make_pair(i, 0));
 
    int value;                      //индекс вектора
    string word;                    //промежуточное слово из строки
    istringstream ii(line);
 
    while(ii >> word){              //разделяем строку по слову
        if(isupper(word[0]))            //если первая буква большая
            value = word[0] - JDX;      
        else                            //если маленькая
            value = word[0] - IDX;
 
        ++coll[value].second;           //увеличиваем счетчик
    }
 
    //сортируем по частоте встречающихся символов
    sort(coll.begin(), coll.end(), [](pair<char, int> op1, pair<char, int> op2)
        {
            return op1.second > op2.second; 
        });
 
    //выводим вектор пар
    for_each(coll.begin(), coll.end(), [](pair<char, int> op)
        {
            cout << op.first << ": " << op.second << endl;  
        });
 
    cout << "\n\n";
    return 0;
}
а что вы изучаете?
Croessmah
30.04.2013, 23:08
  #5

Не по теме:

Цитата Сообщение от learning Посмотреть сообщение
просто дело в том что я немного не этот си изучаю
Ну это вообще Си++, а не Си

yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
30.04.2013, 23:09     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) #6
ну про язык ничего не было сказано в описании задачи)
learning
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 19
30.04.2013, 23:26  [ТС]     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) #7
сам тогда разберусь

Добавлено через 1 минуту
с++
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
01.05.2013, 01:19     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) #8
Дописал еще свой вариант, жаль не выложить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
 
int main()
{
    std::string s = "long very little man vic list mon viski victor";
    //std::getline(std::cin, s); //или ручной ввод
    
    typedef std::vector<char> vch;
    std::vector<vch> letters;
    std::istringstream iss(s);
    for (std::string temp; iss>>temp; iss)
    {
        auto it = std::find_if(letters.begin(), letters.end(), [=](const vch& v){return v.front() == temp.front();});
        if (it != letters.end())
            it->push_back(temp.front());
        else
            letters.push_back(vch(1, temp.front()));
    }
    std::sort(letters.begin(), letters.end(), [](const vch& lhs, const vch& rhs){return lhs.size() > rhs.size();});
    
    for (const auto& i : letters)
        for (const auto& j : i) std::cout<<j<<" ";
    
    std::cout<<"\n\n\n";
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2013, 01:45     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления)
Еще ссылки по теме:

Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в порядке убывания C++
Сортировка слов в строке в порядке убывания их длины C++
Замените первые буквы всех слов на заглавные C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
learning
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 19
03.05.2013, 01:45  [ТС]     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления) #9
написал код, не идеален но все равно не пойму в чем проблема
Код
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
char t[50];
main()
{ clrscr();
  fstream f;
  f.open("baza.txt",ios::in);
  if(!f){cout<<"\n Oshibka pri  otkritii faila\n";
  exit(0);}
  while(!f.eof())
  f>>t;
  f.close();

  int i,k;
  char B[20];
  for(i=0;i<50;i++)
  {if((t[i]!=' ')&&(t[i-1]==' '))
  t[i]=B[k];
  };
  cout<<B[k];
  getch

}
Yandex
Объявления
03.05.2013, 01:45     Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления)
Ответ Создать тему
Опции темы

Текущее время: 06:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru