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

Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. - C++

Восстановить пароль Регистрация
 
vitaxa94
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 66
10.03.2012, 13:38     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #1
Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку.

Добавлено через 12 часов 50 минут
помогите пожалуйста, очень нужно...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2012, 13:38     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку.
Посмотрите здесь:

Программа считывает строку, делит ее на слова и выводит в порядке убывания длины слов (Ох,функции.Где ошибка?) C++
Разбить строку на слова, добавить эти слова в массив строк C++
C++ Отсортировать в лексикографическом порядке последовательность слов одинаковой длины (сортировкой Хоара)
Объединить два массива одинаковой длины в третий, чередуя элементы первого и второго массивов C++
C++ Выбрать из текста все слова одинаковой длины
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
10.03.2012, 14:24     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <iterator>
#include <algorithm>
#include <unistd.h>
 
typedef std::vector< std::string >            str_vec_t;
typedef std::map< size_t, str_vec_t >         length_map_t;
typedef std::pair< size_t, str_vec_t >        length_pair_t;
typedef std::istream_iterator< std::string >  words_in_it_t;
typedef std::ostream_iterator< std::string >  words_out_it_t;
 
struct size_comparator
{
    bool operator() ( const length_pair_t &a, const length_pair_t &b )
    {
        return a.second.size() < b.second.size();
    }
};
 
int main( )
{
    length_map_t length_map;
 
    // если выводим на терминал - вывести приглашение на ввод
    if( isatty( STDOUT_FILENO ) )
        std::cout << "> ";
 
    // составляем карту массивов слов с ключом по длине слова
    for( words_in_it_t it( std::cin ); it != words_in_it_t(); it++ )
        length_map[ it->length() ].push_back( *it );
 
    if( !length_map.size() )
        return 0;
 
    // ищем элемент карты с бОльшим числом элементов
    length_map_t::const_iterator biggest_words_set =
             std::max_element( length_map.begin(), length_map.end(), size_comparator() );
 
    // выводим его на std::cout
    std::copy( biggest_words_set->second.begin(), biggest_words_set->second.end(), words_out_it_t( std::cout, " " ) );
 
    return 0;
}
Код
> Maps are a kind of associative container that stores elements formed by the combination of a KEY VALUE and a MAPPED VALUE.

In a MAP, the KEY VALUE is generally used to uniquely identify the element, while the MAPPED VALUE is some sort of value associated to thie KEY.
^Z
of by of In is to is of to
vitaxa94
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 66
10.03.2012, 15:06  [ТС]     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #3
Спасибо!

а библиотека
#include <unistd.h> я так понял для unix. мой компилятор MVS пятого года отказывается с ней работать =/ как избежать данной ошибки?
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
10.03.2012, 15:09     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #4
Цитата Сообщение от vitaxa94 Посмотреть сообщение
а библиотека
#include <unistd.h> я так понял для unix. мой компилятор MVS пятого года отказывается с ней работать =/ как избежать данной ошибки?
Используйте виндовый аналог isatty():

Цитата Сообщение от http://suacommunity.com/dictionary/isatty-entry.php
Unix

header file: unistd.h

int isatty(int fd);

Windows

header file: io.h

int _isatty(int fd);
vitaxa94
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 66
10.03.2012, 15:35  [ТС]     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #5
Разобрался)
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <iterator>
#include <algorithm>
#include <io.h>
 using namespace std;
typedef vector< string >            str_vec_t;
typedef map< size_t, str_vec_t >         length_map_t;
typedef pair< size_t, str_vec_t >        length_pair_t;
typedef istream_iterator< string >  words_in_it_t;
typedef ostream_iterator< string >  words_out_it_t;
 
struct size_comparator
{
    bool operator() ( const length_pair_t &a, const length_pair_t &b )
    {
        return a.second.size() < b.second.size();
    }
};
 
int main( )
{
    length_map_t length_map;
 
    // если выводим на терминал - вывести приглашение на ввод
    if( _isatty(_fileno(stdout)) )
        cout << "> ";
 
    // составляем карту массивов слов с ключом по длине слова
    for( words_in_it_t it( cin ); it != words_in_it_t(); it++ )
        length_map[ it->length() ].push_back( *it );
 
    if( !length_map.size() )
        return 0;
 
    // ищем элемент карты с бОльшим числом элементов
    length_map_t::const_iterator biggest_words_set =
             max_element( length_map.begin(), length_map.end(), size_comparator() );
 
    // выводим его на cout
    copy( biggest_words_set->second.begin(), biggest_words_set->second.end(), words_out_it_t( cout, " " ) );
 
    return 0;
}
компилируется, все ок, токо вопрос, что нужно ввести, чтобы закончить ввод? а то бесконечный получается...
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
10.03.2012, 16:01     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #6
Ctrl+Z, оно же - маркер конца файла. То есть Ctrl+Z -> Enter
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
10.03.2012, 23:37     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #7
Вариант.
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
51
52
#include <vector>
#include <map>
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
#include <algorithm>
 
typedef std::vector<std::string> VectorOfStrings;
 
VectorOfStrings words(const std::string &string) {
  std::stringstream source(string);
  VectorOfStrings result;
  std::copy(std::istream_iterator<std::string>(source),
    std::istream_iterator<std::string>(),
    std::back_inserter(result));
  return result;
};
 
std::string unwords(const VectorOfStrings &words) {
  std::stringstream result;
  std::copy(words.begin(), words.end(),
    std::ostream_iterator<std::string>(result, " "));
  return result.str();
}
 
std::map<int, VectorOfStrings> groupByLength(const VectorOfStrings &words) {
  std::map<int, VectorOfStrings> result;
  for (VectorOfStrings::const_iterator i = words.begin(); i != words.end(); ++i)
    result[i->size()].push_back(*i);
  return result;
}
 
const VectorOfStrings &longestGroup(const std::map<int, VectorOfStrings> &groups) {
  struct Local {
    static bool compare(const std::pair<int, VectorOfStrings> &a,
      const std::pair<int, VectorOfStrings> &b) {
      return a.second.size() < b.second.size();
    }
  };
  return (std::max_element(groups.begin(), groups.end(),
    Local::compare))->second;
}
 
int main(int argc, char *argv[]) {
  std::cout << 
    unwords(
    longestGroup(
    groupByLength(
    words("these are words we could not sing"))))
    << std::endl;
}

Не по теме:

Функциональные языки просто созданы для таких задач.

Код
maxChainOfWords :: [Char] -> [Char]
maxChainOfWords = unwords . maximum . grouped . sorted . words
    where maximum = List.maximumBy length'
          grouped = List.groupBy equalLength
          sorted = List.sortBy length'
          --
          equalLength = (==) `Function.on` length
          length' = compare `Function.on` length

talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
10.03.2012, 23:42     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #8
lemegeton, а что за язык в коде в оффтопе?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2012, 23:53     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку.
Еще ссылки по теме:

C++ Сравнить четыре слова одинаковой длины
Заданы две строки одинаковой длины. Построить новую строку, состоящую из символов как одной, так и другой C++
C++ Удаление слов одинаковой длины и сортировка их по алфавиту

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
10.03.2012, 23:53     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку. #9
Цитата Сообщение от talis Посмотреть сообщение
lemegeton, а что за язык в коде в оффтопе?
Haskell.
Yandex
Объявления
10.03.2012, 23:53     Определить наиболее многочисленную группу слов одинаковой длины. Объединить эти слова в строку.
Ответ Создать тему
Опции темы

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