Форум программистов, компьютерный форум 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
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
19.11.2012, 16:07     Группы анаграмм в строке
Вот ленивое решение на основе внутренней сортировки по ключам в классе multimap. Нам остается только создать уникальный идентификатор анаграммы - то бишь просто отсортировать буквы в слове(если сортировать буквы в словах-анаграммах, всегда получим строчку одного и того же вида).
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
    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;
    }
    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( );
Файл in.txt:
Код
секта автор рост весточка аскет товар сигара трос тесак отвар качество сорт месть ток свет сетка трос
Файл out.txt:
Код
весточка качество 
автор товар отвар 
секта аскет тесак сетка 
рост трос сорт трос
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru