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

Группы анаграмм в строке - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Совместить два цикла http://www.cyberforum.ru/cpp-beginners/thread701391.html
Лаба по инфе на совершенные числа, проверка и вывод всех в диапазоне. Пашет нормально, но учитель сказал совместить два похожих цикла в один. Кто что может подсказать? void check_perfect(int A) { int sum=0; for(int i=1; i<A; i++) if(A%i==0) { sum += i; } if(sum==A) cout<<"Число совершенно, не трогай его"<<endl;
C++ Использование конструкторов и деструктора при проектировании пользовательского класса предметная область цветок. Отсортировать массив объектов по свойству месяц цветения (месяц задать полем типа char*). Получить отсортированный список названий цветов по заданному месяцу цветиния. помогите в решении. http://www.cyberforum.ru/cpp-beginners/thread701388.html
Использование указателей при работе с одномерными и двумерными массивами C++
Даны натуральное число n, действительные числа A1......An . Если в последовательности A1.....An есть хотя бы один член, меньший, чем -3, то все отрицательные члены заменить их квадратами, оставив остальные члены без изменения; в противном случае домножить все чле-ны на 0.1. Просьба написать программу на Turbo C++
C++ Работа с матрицей
Подскажите пожалуйста как правильно написать? В классе имеется матрица(char**), в функцию передаю класс(char find_path(Map Level)) Провожу дальнейшие махинации... и дохожу до кода: else { t=a; while(t>1) { if(a==t-1)
C++ Удаление столбца матрицы http://www.cyberforum.ru/cpp-beginners/thread701383.html
Задана матрица А целых чисел размера N x M (N,M <= 20, N и M задаются как параметры). Преобразовать ее в матрицу В путем удаления столбца этой матрицы с минимальным номером, в котором все элементы отрицательны и упорядочены по убыванию. Мои попытки: #include <stdio.h> #define N 20 #define M 20 int main() {
C++ Простые числа Задача: Написать функцию, которая заполняет вектор простыми числами и выводит их на экран. Проблема: Не добавляется "2" в начало вектора. Как это исправить? Заранее спасибо. #include <iostream> #include <vector> using namespace std; подробнее

Показать сообщение отдельно
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
26.11.2012, 20:40     Группы анаграмм в строке
Multimap содержит массив шаблонных структур типа pair - в данном случае pair <string, string> - и массив указателей на них. Метод begin() возвращает первый элемент этого массива указателей - он, как и любой другой элемент этого массива, может служить итератором для последовательного доступа ко всем элементам. В итоге итератор it содержит в себе указатель на какой-либо экземпляр структур pair внутри multimap, и применяя к нему оператор ->, мы получаем непосредственный доступ к содержимому данной структуры, например, к полям first и second.
Цитата Сообщение от Delmellor Посмотреть сообщение
И ещё. Вот строки идут через пробел.. а как программа понимает, что через пробел их нужно считывать?
Так уж реализованы потоки - пробел является разделителем по умолчанию.
Цитата Сообщение от Delmellor Посмотреть сообщение
как переписать программу, чтобы были доступны и другие разделители?
Вот так.
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
    fstream file_in( "in.txt", ios_base::in ), file_out( "out.txt", ios_base::out ); // открываем файлы с соответствующими режимами
    multimap <string, string> ana_map; // набор пар типа pair<string, string>, с возможностью дубликации ключей
    string str, sorted_str;
 
    if ( !file_in.is_open( ) || !file_out.is_open( ) ) { // если какой-либо из файлов не открыт - ошибка и завершение программы
        cout << "error opening files\n\n";
        system( "pause" );
        return -1;
    }
 
    typedef ctype <TCHAR> ctype_tchar;
    size_t const size = ctype_tchar::table_size;
    // ctype_tchar::mask table[ctype_tchar::table_size] = {ctype_tchar::mask( )};  <--- по идее, так правильней, относительно типа char, но, во-первых, как ни бейся, у меня выпадает ошибка constant expression requared, а во-вторых, нас ведь может больше интересовать wchar_t
    ctype_tchar::mask table[256] = {ctype_tchar::mask( )}; // создаем таблицу масок символов
    table[static_cast <size_t> ( ' ' )] = ctype_tchar::space; // модифицируем маску интересующих нас символов, ассоциируя их с пробелом
    table[static_cast <size_t> ( ',' )] = ctype_tchar::space;
    table[static_cast <size_t> ( '-' )] = ctype_tchar::space;
    table[static_cast <size_t> ( ';' )] = ctype_tchar::space;
    file_in.imbue( locale( file_in.getloc( ), new ctype_tchar( table ) ) ); // модифицируем локаль потока, добавляя созданные нами маски - все, поток будет считать пробелом любой указанный нами символ и соответственно будет обрабатывать его как разделитель
 
    while ( !file_in.eof( ) ) { // заполняем ana_map из потока file_in
        file_in >> str;         // слова, разделенные пробелом, по одному помещаются в str
        sorted_str = str;
        sort( sorted_str.begin( ), sorted_str.end( ) ); // сортируем буквы в строчке sorted_str по возрастанию
        ana_map.insert( pair <string, string> ( sorted_str, str ) ); // вставляем пару строчек в ana_map, где ключом служит сортированная строчка, а значением - исходное слово; простая форма записи типа "ana_map[sorted_str] = str;" у меня не компилируется по причине отсутствия оператора + в данном шаблоне multimap для типа string - хз почему, да и бог с ним
    }
    str = ana_map.begin( )->first;
    for ( multimap <string, string> ::iterator it = ana_map.begin( ); it != ana_map.end( ); ++it ) { // проходим циклом по всем парам в ana_map последовательно, так как они отсортированы внутри по ключу, остается только отсечь лишнее и вывести все остальное :)
        if ( ana_map.count( it->first ) > 1 ) { // отсекаем ключи, встречающиеся один раз
            if ( str != it->first && file_out.tellp( ) ) { // разделяем наборы анаграмм по строчкам: если текущий ключ не равен предыдущему И фокус вывода НЕ находится в начале файла, то выводим в файл перенос строки
                file_out << endl;
            }
            file_out << it->second << " ";
            str = it->first;
        }
    }
    file_in.close( );
    file_out.close( );
 
Текущее время: 08:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru