Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 799
Завершенные тесты: 1
1

Вывести слова в порядке убывания их длин

12.03.2017, 10:55. Просмотров 681. Ответов 14
Метки нет (Все метки)

Дано предложение состоящее только из букв латинского алфавита с нижним и (или) верхним регистром букв. Вывести слова в порядке убывания их длин. Может есть какие-нибудь функции в C++ для работы со строками а то я так подумал если писать вручную уйдёт уйму времени и нервов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2017, 10:55
Ответы с готовыми решениями:

Вывести все слова строки в порядке убывания их длин
Дана строка текста, в которой слова разделены пробелами. Необходимо: -...

Вывести слова сообщения в порядке возрастания их длин
Вывести слова сообщения в порядке возрастания их длин.

Вывести слова строки в порядке убывания длины
требуется написать программу которая: -считает количество слов в предложении...

Вывести все слова строки в порядке убывания
Помогите пожалуйста: Дана строка текста, в которой слова разделены пробелами....

Вывести слова в порядке убывания количества символов
Помогите написать программу на Turbo C: Дано предложение. Вывести слова в...

14
likehood
966 / 815 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
12.03.2017, 11:54 2
Разбить на слова с помощью std::istringstream, занести их в std::vector, отсортировать функцией std::sort.
1
igorrr37
1875 / 1490 / 752
Регистрация: 21.12.2010
Сообщений: 2,484
Записей в блоге: 11
12.03.2017, 12:28 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <set>
#include <string>
#include <functional>
#include <sstream>
#include <iterator>
#include <algorithm>
 
 
int main()
{
    std::string str("These objects are automatically constructed from initializer list declarators");
    std::istringstream ss(str);
    std::multiset < std::string, std::function<bool (std::string const&, std::string const&)> > st(std::istream_iterator<std::string>(ss), std::istream_iterator<std::string>(), [](std::string const& s1, std::string const& s2) {return s1.size() > s2.size();});
    std::copy(st.begin(), st.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
2
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 799
Завершенные тесты: 1
12.03.2017, 12:59  [ТС] 4
А
Цитата Сообщение от likehood Посмотреть сообщение
Разбить на слова с помощью std::istringstream, занести их в std::vector, отсортировать функцией std::sort.
Можете показать? Пытался сам написать но не получилось.
igorrr37, мне пока ещё рано с такими кодами работать
0
likehood
966 / 815 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
12.03.2017, 13:30 5
Лучший ответ Сообщение было отмечено no swear как решение

Решение

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
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <string>
 
using namespace std;
 
bool compare_function(const string &s1, const string &s2)
{
    return s1.size() > s2.size();
}
 
int main()
{
    string s = "One two three four five six seven";
    vector<string> v;
    istringstream iss(s);
 
    string word;
    while (iss >> word) {
        v.push_back(word);
    }
 
    sort(v.begin(), v.end(), compare_function);
 
    for (const string &word: v) {
        cout << word << ' ';
    }
    cout << endl;
}
1
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 799
Завершенные тесты: 1
12.03.2017, 13:41  [ТС] 6
Цитата Сообщение от likehood Посмотреть сообщение
for (const string &word: v)
Вот это мне не понятно. Что это значит "const string &word" это типа кол-во слов? И почему в цикле вы написали так "const string &word: v" что такое здесь v?
0
Ferrari F1
792 / 522 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
12.03.2017, 13:53 7
no swear, Range-based for loop
1
likehood
966 / 815 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
12.03.2017, 14:04 8
Цитата Сообщение от no swear Посмотреть сообщение
Вот это мне не понятно.
Это С++11.

Более олдскульный способ:
C++
1
2
3
for (size_t i = 0; i < v.size(); i++) {
    cout << v[i] << ' ';
}
1
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 799
Завершенные тесты: 1
12.03.2017, 14:07  [ТС] 9
Пытался откомпилировать вот эту строчку кода чтобы посмотреть что она делает но выдаёт такую ошибку "error range-based 'for' loops are not allowed in C++98 mod"
C++
1
2
3
4
5
6
7
int x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
for( int y : x ) 
{ 
    cout << y << " ";
}
    cout << endl;
Это из сайта на которую дал мне ссылку Ferrari F1
0
likehood
966 / 815 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
12.03.2017, 14:13 10
Цитата Сообщение от no swear Посмотреть сообщение
"error range-based 'for' loops are not allowed in C++98 mod"
Нужно включить поддержку C++11 в настройках компилятора.
1
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 799
Завершенные тесты: 1
12.03.2017, 14:20  [ТС] 11
Переделал ваш код чтобы мне понятно было. Вместо sort использовал сортировку пузырьком ну и вывод слов написал так как вы предложили for (int i = 0; i < v.size(); i++) cout << v[i] << ' ';
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s = "One two three four five six seven";
    vector<string> v;
    istringstream iss(s);
 
    string word;
    while (iss >> word) {
        v.push_back(word);
    }
 
    for(int i=0;i<v.size() - 1;i++)
        for(int j=0;j<v.size() - 1;j++)
            if(v[j].length()<v[j+1].length())
                swap(v[j], v[j+1]);
 
    for(int i=0;i<v.size();i++)
        cout << v[i] << " ";
}
0
likehood
966 / 815 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
12.03.2017, 14:26 12
Цитата Сообщение от no swear Посмотреть сообщение
Вместо sort использовал сортировку пузырьком
Решать конечно вам, но я всё же советую освоить стандартную функцию сортировки. Для больших массивов сортировка пузырьком как правило очень неэффективна, std::sort подойдёт гораздо лучше.
1
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 799
Завершенные тесты: 1
12.03.2017, 15:27  [ТС] 13
Ну я просто не понял как вы используете эту функцию sort. Вы пишите (v.begin(), v.end()) это ясно но потом вы пишите compare_function которая выглядит так(смотрите вниз на код) и здесь у меня начинается неразбериха в голове, объясните пожалуйста что это?
C++
1
2
3
4
bool compare_function(const string &s1, const string &s2)
{
    return s1.size() > s2.size();
}
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,207
Записей в блоге: 1
Завершенные тесты: 2
12.03.2017, 15:57 14
Цитата Сообщение от no swear Посмотреть сообщение
выдаёт такую ошибку "error range-based 'for' loops are not allowed in C++98 mod"
Как включить в своей среде разработки поддержку определённого стандарта (С++11, С++14, С++17)
1
likehood
966 / 815 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
12.03.2017, 16:13 15
Лучший ответ Сообщение было отмечено no swear как решение

Решение

Цитата Сообщение от no swear Посмотреть сообщение
объясните пожалуйста что это?
Это функция сравнения, которую вызывает функция sort для различных элементов сортируемого массива, чтобы определить, какой из них должен стоять ближе к началу массива. Используя разные функции сравнения мы можем по-разному сортировать наш массив.
1
12.03.2017, 16:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2017, 16:13

Вывести слова строки в порядке убывания числа букв в них
Собственно, имеется готовая на половину программа: #include &quot;stdio.h&quot;...

Нужно отсортировать массив в порядке убывания длин векторов С++
Данный массив А - массив векторов. Отсортировать его в порядке убывания длин...

Дан файл. Надо отсортировать этот файл в порядке убывания длин его строк
Помогите, плиз. Очень надо. Дан файл. Надо отсортировать этот файл в порядке...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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