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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
user_p01
19 / 19 / 2
Регистрация: 03.11.2011
Сообщений: 80
#1

Строки: Выбрать из слов те, которые могут быть получены из образца по правилу - C++

08.09.2012, 11:51. Просмотров 417. Ответов 1
Метки нет (Все метки)

Помогите пожалуйста решить задачу по теме "Строки":
Приняв первое слово за образец, выбрать из остальных слов те, которые могут быть получены из образца по следующему правилу: слова должны состоять из тех же букв, что и слово-образец, причем повторяться буквы могут только в том случае, если в образце содержится не меньшее количество этих букв. Например, из слова "программа" можно получить слова "рама", "грамм", "паром" и т.д.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2012, 11:51     Строки: Выбрать из слов те, которые могут быть получены из образца по правилу
Посмотрите здесь:

Подсчитать в заданной строке число слов, которые могут быть разделены пробелом, табуляцией, переводом строки - C++
Объясните пожалуйста,в чем ошибка? #include<stdio.h> #include<string.h> int *words(char *s) { int len=strlen(s),i,k=1,l=0; ...

Среди элементов массива найти индексы всех таких, которые могут быть получены cуммированием двух элементов - C++
Вот задачка помогите, ЛЮДИ Среди элементов массива найти индексы всех таких, которые могут быть получены cуммированием двух элементов...

Найти слова которые могут быть полностью сложены из других слов,сцепление слов(конкатенация) - C++
найти слова которые могут быть полностью сложены из других слов,сцепление слов(конкатенация)

В файле-словаре найти и распечатать слова, которые могут быть полностью составлены из других слов словаря - C++
В файле-словаре найти и распечатать слова, которые могут быть полностью составлены из других слов словаря с помощью конкатенации,...

В файле-словаре найти и распечатать слова, которые могут быть полностью составлены из других слов словаря - C++
В файле-словаре найти и распечатать слова, которые могут быть полностью составлены из других слов словаря с помощью конкатенации,...

В файле-словаре найти и распечатать слова, которые могут быть полностью составлены из других слов словаря - C++
В файле-словаре найти и распечатать слова, которые могут быть полностью составлены из других слов словаря с помощью конкатенации,...

Массив функций которые хранятся в одном объекте, но могут быть выполнены по индексу - C++
Допустим есть любая функция, с любыми аргументами, например void func(std::string) {} или void func(int a, int b, int c) {}

Вывести только те слова, которые могут без искажений быть записаны латинскими символами - C++
3.Дан текст на русском языке. Вывести только те слова, которые могут без иска* жений быть записаны латинскими символами. Например, MAMA,...

Дан набор карточек, на каждой из которых написана буква(среди букв могут быть повторяющиеся) и список слов - C++
Доброго времени суток ! Можете помочь в объяснении задачи, не могу понять что от меня хотят Дан набор карточек, на каждой из которых...

Где могут быть ошибки? - C++
#include <stdio.h> void main () { int a, b, c, d; printf ("Enter the quality of seconds\n"); scanf ("%d", &a); if (a<60) ...

Могут ли значения быть сторонами треугольника? - C++
Есть задача: А если они не равны нулю, то даже если каждая будет равна 1, они все равно смогут быть сторонами треугольника....

Какие функции не могут быть виртуальными? - C++
Подскажите пожалуйста какие функции не могут быть виртуальными...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
08.09.2012, 15:02     Строки: Выбрать из слов те, которые могут быть получены из образца по правилу #2
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
#include <string>
#include <map>
#include <vector>
 
std::map<char, int> get_pattern(std::string &str) {
    std::map<char, int> result();
    for (int i = 0; i < str.size(); ++i) {
         result[str[i]]++;
    }
    return result;
}
 
int check(std::string &str, std::map<char, int> &pattern) {
    std::map<char, int> transform = get_pattern(str);
    if (transform.size() > pattern.size()) return 0;
    for (std::map<char, int>::iterator it = transform.begin(), find; 
        it != transform.end(); ++it) 
    {
        if ( (find = pattern.find(it->first)) == pattern.end() 
            || it->second > find->second ) return 0;
    }
    return 1;
}
 
int main() {
    std::string initalStr; // начальное слово
    std::vector<std::string> strs; // слова для сравнения
    std::map<char, int> pattern = get_pattern(initalStr);
    for (std::vector<std::string> it = strs.begin(); it != strs.end(); ++it) {
        if (check(*it, pattern)) // запоминаем
    }
}
Год уже не писал перепроверь что к чему.
Yandex
Объявления
08.09.2012, 15:02     Строки: Выбрать из слов те, которые могут быть получены из образца по правилу
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru