Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2013, 12:38   #1
Учусь))
Пользователь
 
Регистрация: 01.05.2013
Сообщений: 16
Радость Работа со строками в обычном С++

Нужно составить программу которая во введенном тексте находит все первые буквы слов и печатает их в порядке уменьшения частоты их употребления. слово брать как последовательность символов заключенных между пробелами
Учусь)) вне форума Ответить с цитированием
Старый 01.05.2013, 14:28   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

в порядке уменьшения частоты использования где? В слове? тексте?. Могу написать данную программу.

ICQ - 576319398
Skype - NeoProgrammer
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 01.05.2013, 15:12   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

если текст в файле
Код:
ifstream ifst("in.txt");
char word[25];

while(0 == ifst.eof()) {
  ifst >> word;
  cout << word[0]; // выводит на экран первую букву слова
}
это первая часть, что дальше не получатеся?
rrrFer вне форума Ответить с цитированием
Старый 01.05.2013, 16:32   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

rrrFer, раз C++, то зачем рисковать с массивом char'ов. Использовать string для этих же целей и "не париться".
Код:
string s;
while (ifst >> s) {
}
Хотел это давно написать, но не придумал "красивого" способа сортировки.

UPD
Придумал
Код:
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;

typedef pair<char, int> T;

int
main()
{
    string s;
    map<char, int> m;
    while (cin >> s) {
        ++m[s[0]];
    }
    vector<T> v(m.begin(), m.end());
    sort(v.begin(), v.end(), [](T x, T y) -> bool {return y.second < x.second;});
    for_each(v.begin(), v.end(), [](T x) {cout << x.first << " " << x.second << endl;});
}
Have fun
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 01.05.2013 в 17:13.
BDA на форуме Ответить с цитированием
Старый 01.05.2013, 18:03   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
rrrFer, раз C++, то зачем рисковать с массивом char'ов. Использовать string для этих же целей и "не париться".
в первом посте указано
Цитата:
слово брать как последовательность символов
я не дочитал, угу )
Цитата:
UPD
Придумал
хмхм, сначала копируешь словарь в вектор, а потом сортируешь вектор - не красиво.

Код:
typedef pair<char, int> T;
typedef pair<int, char> TT;
//...
map<char, int> m;
multimap<int, char> mm;
//...
for_each(m.begin(), m.end(), [&mm](T x) {mm.insert(TT(x.second, x.first));});
for_each(mm.begin(), mm.end(), [](TT x) {cout << x.first << x.second << endl;});
тоже не красиво, и по времени также, вроде бы.

МБ тут ваще словарь лучше не использовать, и еще вот тут меня сомнения терзают: ++m[s[0]]; - кто инициализировал значения словаря нулями? - я этого не делал, и не видел чтобы это делал стандарт, просмотрел?
rrrFer вне форума Ответить с цитированием
Старый 01.05.2013, 18:37   #6
Учусь))
Пользователь
 
Регистрация: 01.05.2013
Сообщений: 16
По умолчанию

vector я вообще не проходил, мне достаточно простейший цикл который проверяет строку на пробелы между словами а потом берет букву после пробела (то есть первую) а потом заносит ее в вещественный массив с которым я потом и работаю (располагаю в порядке)
Учусь)) вне форума Ответить с цитированием
Старый 01.05.2013, 19:07   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
сначала копируешь словарь в вектор, а потом сортируешь вектор - не красиво.
Ну да.
Цитата:
кто инициализировал значения словаря нулями?
http://www.cplusplus.com/reference/map/map/operator[]/
the element is constructed using its default constructor

Цитата:
Сообщение от Учусь)) Посмотреть сообщение
vector я вообще не проходил, мне достаточно простейший цикл который проверяет строку на пробелы между словами а потом берет букву после пробела (то есть первую) а потом заносит ее в вещественный массив с которым я потом и работаю (располагаю в порядке)
Ну не проходил, так не проходил
Во-первых, почему массив вещественный (лучше, имхо, целый).
Во-вторых, в чем же тогда затруднения?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 01.05.2013 в 19:23.
BDA на форуме Ответить с цитированием
Старый 01.05.2013, 19:40   #8
Учусь))
Пользователь
 
Регистрация: 01.05.2013
Сообщений: 16
По умолчанию

Ну не проходил, так не проходил
Во-первых, почему массив вещественный (лучше, имхо, целый).
Во-вторых, в чем же тогда затруднения?[/QUOTE]

в том что я не понимаю вашу программу
Учусь)) вне форума Ответить с цитированием
Старый 01.05.2013, 19:47   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Учусь)) Посмотреть сообщение
в том что я не понимаю вашу программу
Ну так раз Вы этого не проходили, то и не рассматривайте мою программу, а пишите свою.

Цитата:
Сообщение от ROD Посмотреть сообщение
Что значит "не проходил"? Вы что в школе учитесь? Если нет, то забудьте эту фразу.
Согласен. Если поставлена только задача, и никаких ограничений не оговаривалось, то решать можно с использованием всех доступных средств.
Правда, обычно ограничения все же есть. Например, было задание написать быструю сортировку, и решение с использованием стандартного qsort не подошло бы
Использование материала, который еще не был пройден, подразумевает, что Вы сможете с легкостью объяснить любую строчку своей программы (впрочем, так должно быть всегда).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 01.05.2013 в 19:59.
BDA на форуме Ответить с цитированием
Старый 01.05.2013, 19:52   #10
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Сообщение от Учусь)) Посмотреть сообщение
vector я вообще не проходил
Что значит "не проходил"? Вы что в школе учитесь? Если нет, то забудьте эту фразу.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементы диалога в обычном (не диалоговом!) окне БалаШагаЛ Win Api 13 17.04.2014 11:35
СТРОКОВЫЙ БУФЕР. Задача в обычном С BigDaddy Помощь студентам 0 27.11.2012 17:43
Как параллельно вызвать 2 функции на обычном компеляторе DEV-C++ Medved' Помощь студентам 1 30.08.2011 16:40
можно ли просматривать 3d фильмы на обычном мониторе? alex(21) Свободное общение 7 08.02.2011 08:30
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19