Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/55: Рейтинг темы: голосов - 55, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 18

Сортировка слов в строке по длине слова

23.02.2016, 14:52. Показов 10142. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с алгоритмом сортировки строки.
Необходимо осуществить сортировку строки чтобы в начале строки
располагалось слово максимальной длины, а в конце строки - минимальной.
Не совсем понимаю как реализовать данный алгоритм.
Мудрил, но так ничего и не получилось.
Примерно в голове понимаю что надо сделать. Но на реализацию не хватает знания.
Задать строку размером n символов.
Попросить пользователя ввести её. используя gets.
Затем взять строку и разбить её на слова используя strtok.
Ну и тут у меня начинаются проблемы. Я не понимаю
как это сделать, в цикле, слово должно записаться в новую строку а потом свериться ещё одним разбитым словом.
Если оно больше, поменять их местами используя дополнительный массив, чтоб не потерять данные.
Затем это всё соеденить используя strcat.
Никак не получается это воплотить в реальность.
P.S может у меня алгоритм кривой, поэтому ничего не получается?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2016, 14:52
Ответы с готовыми решениями:

Ввести строку и слово. Вывести количество слов в строке, имеющих длину, равную длине введенного слова.
Ввести строку и слово. Вывести количество слов в строке, имеющих длину, равную длине введенного слова.

Ввести строку и слово. Вывести количество слов в строке, имеющих длину, равную длине введенного слова.
Как ввести строку и слово, чтобы вывести количество слов в строке, имеющих длину, равную длине введенного слова. Помогите плз.

Как отсортировать строки по кол-ву слов и слова в строке по длине слов
Суть задания:Вводить последовательность не более чем 256 символов,ввод заканчивается #.Последовательность является набором...

7
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
23.02.2016, 17:23
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
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
bool pred(const string &a, const string &b)
{
    if (a.size() > b.size()) return true;
    return false;
}
 
int main() 
{
    vector<string> v;
    vector<string> :: iterator it;
    char str[] = "AAAAAA BBBBBBBB CCCCCCcCC";
    cout<<str<<endl;
    char * pch = strtok (str," ,.-"); 
 
  while (pch != NULL)                         
  {
      v.push_back(string(pch));
      pch = strtok (NULL, " ,.-");
  }
  
  sort(v.begin(),v.end(),pred);
  cout<<"**************************************"<<endl;
  
  string s;
  it = v.begin();
  while (it!=v.end())
  {
    s += *it;
    s += " ";
    it++;
  }
  v.clear();
  cout<<s<<endl;
    return 0;
}
1
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 18
24.02.2016, 11:41  [ТС]
Спасибо, не совсем понимаю что происходит в данном коде. Не проходил ещё вектора. Попробую почитать про вектора. Попробую переделать под обычное управление массивами.

Добавлено через 17 часов 23 минуты
Чёт я вообще потух. Помогите с решением задачи.
Задан текст, состоящий из строк. Строк не менее 10. В строке не менее 5
слов. В слове не менее 5 символов. Слова разделены 1 пробелом.
Осуществить сортировку строк таким образом, чтобы в начале строки
располагалось слово максимальной длины, а в конце строки - минимальной.
Программа должна выполнять ввод текста, вывод его исходного варианта,
выполнять необходимые действия и выводить полученный текст.
Без использования векторов.
Пытался хотя бы для 1 строки выполнить сортировку. Дохожу до разделение предложения на буквы и
дальше даже не понимаю в каком направлении двигаться.
з.ы голова уже пухнет от всего
0
0 / 0 / 0
Регистрация: 18.02.2016
Сообщений: 2
24.02.2016, 12:06
Цитата Сообщение от Siplbl Посмотреть сообщение
Дохожу до разделение предложения на буквы и
дальше даже не понимаю в каком направлении двигаться.
Зачем ты разделяешь предложение на буквы?
Читаешь слово, считаешь в нем кол-во букв, пишешь в новый массив, читаешь следующее, до знака перехода, сортируешь массив.

Добавлено через 13 минут
Или считай буквы до пробела и записывай результат в массив, потом сортируй. Так до знака перехода.

Или юзай библиотеки.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
24.02.2016, 12:32
Цитата Сообщение от Siplbl Посмотреть сообщение
Спасибо, не совсем понимаю что происходит в данном коде. Не проходил ещё вектора.
происходит то что сам предложил. можешь написать свой вектор.
Цитата Сообщение от Siplbl Посмотреть сообщение
Чёт я вообще потух
я привел решение твоей проблемы , что еще надо то ?

Цитата Сообщение от Siplbl Посмотреть сообщение
Без использования векторов.
я пас ! не шибко хочу создавать колесо.
0
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 18
24.02.2016, 20:21  [ТС]
Цитата Сообщение от Arzanis Посмотреть сообщение
Зачем ты разделяешь предложение на буквы?
Нето написал
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
#include <iostream>
#include <string.h>
using namespace std;
void main(void)
{
    int n = 5;
    char **str = new char*[n];
    cout << "Enter strings:\n";
    for (int i = 0; i < n; i++)
    {
        str[i] = new char[50];
        gets(str[i]);
    }
    char *temp = new char[100];
    for (int y = 0; y < n; y++)
        for (int i = 0; i < n - 1; i++)
        {
            char *pch = strtok(str[i], " ,.-");
            while (pch != NULL)
            {
                strcpy(temp, pch);
                pch = strtok(NULL, " ,.");
            }
        }
}
Дохожу до сюда и дальше просто не понимаю как реализовать проверку длинны слов и сортировку строк.strtok даёт слово я его кидаю в новый массив. Дальше что с ним делать?

Добавлено через 4 минуты
Цитата Сообщение от RAFA91 Посмотреть сообщение
Сообщение от Siplbl
Чёт я вообще потух
я привел решение твоей проблемы , что еще надо то ?
Сообщение от Siplbl
Без использования векторов.
я пас ! не шибко хочу создавать колесо.
Да я просто разобрать пытаюсь взяв ваш алгоритм и переделать под свои знания.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
25.02.2016, 12:58
Цитата Сообщение от Siplbl Посмотреть сообщение
gets(str[i]);
тут ты вводишь слово или строку ?
0
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 18
25.02.2016, 20:26  [ТС]
Как сделать корректный вывод строк?
Чтоб строки выводились как при вводе только отсортированные.
у меня только так получается

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int bg = 0;
    int n = 2;
    char*str = new char[120];
    char *p = NULL, *tmp = NULL;
    char *pts[20];
    for (int i = 0; i < n; i++)
    {
        pts[i] = new char[80];
        cout << "Enter string  " << i << ": ";
        gets(pts[i]);
    }
    char *strarray [20];
    for (int y = 0; y < n; y++)
    {
        str = new char[120];
        strcpy(str, pts[y]);
            p = strtok(str, " ");
            for (int j = 0;; j++)
            {
                if (p)
                {
                    strarray[bg] = new char[80];
                    strcpy(strarray[bg], p);
                    strarray[bg];
                    bg++;
                }
                else
                    break;
                p = strtok(NULL, " ");
            }
            delete[]str;
    }
    for (int i = 0; i<bg; i++)
    {
        for (int j = 0; j<bg - 1; j++)
        {
            if (strlen(strarray[j])<strlen(strarray[j + 1]))
            {
                tmp = strarray[j];
                strarray[j] = strarray[j + 1];
                strarray[j + 1] = tmp;
            }
        }
    }
    for (int i = 0; i < bg; i++)
    {
        str = new char[120];
        strcpy(str, strarray[i]);
        cout << str << " ";
        delete[]str;
    }
    cout << "\n";
    for (int i = 0; i < bg; i++)
    {
        delete [] strarray[i];
    }
    for (int i = 0; i < n; i++)
    {
        delete[]pts[i];
    }
}
Добавлено через 47 минут
а всё, переделал.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*Эта программа сортирует слова в строках по убыванию*/
/*Вариант 8:*/
/*Задан текст, состоящий из строк. Строк не менее 10. В строке не менее 5
слов. В слове не менее 5 символов. Слова разделены 1 пробелом.
Осуществить сортировку строк таким образом, чтобы в начале строки
располагалось слово максимальной длины, а в конце строки - минимальной.
Программа должна выполнять ввод текста, вывод его исходного варианта,
выполнять необходимые действия и выводить полученный текст.
*/
#include<iostream>
#include<string.h>
#include<Windows.h>
using namespace std;
char*Rus(const char*text);
void str_sort(char *string[], int num);
void str_out(char*string[], int num);
void del(char*string[], int num);
void main()
{
    int bg = 0;
    int n = 5;
    char*str = new char[120];
    char *p = NULL, *tmp = NULL;
    char *pts[20];
    for (int i = 0; i < n; i++)
    {
        pts[i] = new char[80];
        cout << "Enter string  " << i << ": ";
        gets(pts[i]);
    }
    char *strarray [20];
    for (int y = 0; y < n; y++)
    {
        int bg = 0;
        str = new char[120];
        strcpy(str, pts[y]);
        p = strtok(str, " ");
        for (int j = 0;; j++)
        {
            if (p)
            {
                strarray[bg] = new char[80];
                strcpy(strarray[bg], p);
                strarray[bg];
                bg++;
            }
            else
                break;
            p = strtok(NULL, " ");
        }
        str_sort(strarray, bg);
        str_out(strarray, bg);
        del(strarray, bg);
        bg = 0;
        delete[]str;
    }
    for (int i = 0; i < n; i++)
    {
        delete[]pts[i];
    }
}
void del(char*string[], int num)
{
    for (int i = 0; i < num; i++)
    {
        delete[]string[i];
    }
}
void str_out(char*string[], int num)
{
    for (int i = 0; i < num; i++)
    {
        cout<<(string[i]);
        cout << " ";
    }
    cout << "\n";
}
void str_sort(char *string[], int num)
{
    char *tmp;
    for (int i = 0; i<num; i++)
    {
        for (int j = 0; j<num - 1; j++)
        {
            if (strlen(string[j])<strlen(string[j + 1]))
            {
                tmp = string[j];
                string[j] = string[j + 1];
                string[j + 1] = tmp;
            }
        }
    }
}
char bufRus[256];
char*Rus(const char*text)
{
    CharToOemA(text, bufRus);
    return bufRus;
}
3 дня [censored]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2016, 20:26
Помогаю со студенческими работами здесь

В строке, состоящей из слов, определить количество слов имеющих длину, равную длине последнего слова.
в строке, состоящей из слов, определить количество слов имеющих длину, равную длине последнего слова.

Сортировка слов в строке по их длине
Написать программу на языке ассемблера для emu8086 для решения следующей задачи: пользователь вводит строку, необходимо отсортировать слова...

Сортировка слов по длине первого слова
Хотелось бы понять, почему в нижнем цикле я ставлю || != '\n' вместо &amp;&amp; != '\n' то проиходит ошибка сегментации в случае, когда строка...

Сортировка по длине слов в строке в тасме
Здравствуйте, решал задачу по ассемблеру и возникла проблема с типом данных, но я так и не смог ее решить, когда компилю выдает ошибку...

Отсортировать в строке слова по длине слов
Помогите найти ошибку.Ввожу посимвольно строку,считаю длины слов,записываю их в отдельный массив,потом ориентируясь по этому массиву...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru