Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880

Программа для сортировки массива строк

02.04.2014, 20:56. Показов 7215. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать программу для сортировки строк, используя указатели.

Программа должна считать количество элементов массива (вот тут и возникла проблема) строк и сам массив.
Сортированный вывести на экран.
Нужно написать функцию сортировки массива строк, параметры какой -- массив указателей и количество элементов.
===============================

Собственно суть проблемы в том, что при попытки сделать массив например char list[n][100]; (n - вводимое количество строк) -- выдает ошибку. Я так понимаю, n - должна быть const, а не переменной.
Но как же тогда сделать вводимое значение количества строк?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.04.2014, 20:56
Ответы с готовыми решениями:

Пример быстрой сортировки массива строк и сортировки методом выбора
Добрый вечер. Скиньте пожалуйста пример быстрой сортировки массива строк и сортировки массива строк методом выбора. Очень срочно надо,...

Не работает программа для сортировки массива строк
Здравствуйте. Из учебника Уэйта, Прата нашел программу для сортировки массива строк. После ввода 20 строк программа падает. Не подскажете...

Не работает программа сортировки строк с помощью двумерного массива указателей
Не работает программа сортировки строк с помощью двумерного массива указателей. Не подскажете где ошибка? #include...

57
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
02.04.2014, 21:03
динамический массив?
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
02.04.2014, 21:09  [ТС]
Цитата Сообщение от fmtuner Посмотреть сообщение
динамический массив?
Ну да
0
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
02.04.2014, 21:14
Динамический массив
вот тут рядом тема лежит
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
02.04.2014, 22:41  [ТС]
Цитата Сообщение от fmtuner Посмотреть сообщение
вот тут рядом тема лежит
Создать динамический массив с типом int я могу.
Не получается с типом char!!!!!!!!

Добавлено через 16 минут
Эй ребята помогите)

Добавлено через 52 минуты
Вообщем нужен двумерный динамичный массив для char
0
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
02.04.2014, 23:17
C++
1
2
char **A = new char*[stroki]
for (int i=0;i<stroki;i++) A[i]=new char[stolbci];
на выходе двумерный массив к которому можно обращаться A[i][j] например.
1
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
02.04.2014, 23:36  [ТС]
Вот код. С выделением памяти вроде разобрался (хотя у меня Qt MinGW и мне говорили, что он автоматом её выделяет, ну да ладно).
Проблема в том, что cin.getline() не хочет нормально работать. Мне нужно в каждую строку записать текст...
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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleOutputCP(1251);
 
    system("cls");
    int n, size;
    cout << " Введите количество рядков: ";
    cin >> n;
    cout << " Введите размер строки: ";
    cin >> size;
    //Сначала объявляется указатель второго  порядка char **list, который ссылается на массив указателей char*[n]
    char **list = new char*[n];
    for(int i=0; i<n; i++)
        list[i] = new char[size];
 
    
    for(int i=0; i<n; i++)
    {
        cout << " Ведите текст: ";
        cin.getline(list[i],size);// НЕ РАБОТАЕТ!
    }
    
 
    //освобождение выделеной под массив памяти.
    for(int i=0; i<n; i++)
        delete [] list[i];
    return 0;
}
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
03.04.2014, 00:32  [ТС]
Текст: "Введите текст:" почему то дублируется(((
Миниатюры
Программа для сортировки массива строк  
0
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 00:53
C++
1
2
3
4
5
for(int i=0; i<n; i++)
 {
cout << " Ведите текст: ";
 cin.getline(list[i][size],size);// наверное так надо!
 }
ниже по коду тоже самое
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
03.04.2014, 00:57  [ТС]
неа)
0
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 01:05
Цитата Сообщение от andreyananas Посмотреть сообщение
Текст: "Введите текст:" почему то дублируется(((
не дублируется, толком сам не знаю - но вроде как связано с работой cin'а и он хавает твой ентер который нажал после последнего ввода.
другими словами это не 2 раза вводится, а ты ввел "типа" пустую строку

Добавлено через 6 минут
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
#include <iostream>
#include <windows.h>
#include <locale>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");
 
    system("cls");
    int n, size;
    cout << " Введите количество рядков: ";
    cin >> n;
    cout << " Введите размер строки: ";
    cin >> size;
    cout<<endl;
    //Сначала объявляется указатель второго  порядка char **list, который ссылается на массив указателей char*[n]
    char **list = new char*[n];
    for(int i=0; i<n; i++)
        list[i] = new char[size];
 
    cin.sync();
    for(int i=0; i<n; i++)
    {
        cout << " Ведите текст: ";
        cin.getline(list[i],size);// НЕ РАБОТАЕТ!
    }
 
    for (int i=0; i<n;i++)
    {
        cout<<endl;
        for (int j=0;j<size;j++)
        {
            cout<<list[i][j];
        }
    }
 
    //освобождение выделеной под массив памяти.
    for(int i=0; i<n; i++)
        delete [] list[i];
    return 0;
}
вот код - всё работает

Добавлено через 1 минуту
codeblocks mingw
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
03.04.2014, 01:08  [ТС]
я перед циклом ввода fflush(stdin) вставил и дублироваться перестало.

Ну вроде осталось сортировку прикрутить.
0
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 01:11
бог в помощь
1
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
03.04.2014, 01:14  [ТС]
Цитата Сообщение от fmtuner Посмотреть сообщение
бог в помощь
)) та вроде сложное позади, правда я не уверен, правильно ли я сделал.
0
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 01:24
я уверен - ты всё правильно сделал.
0
 Аватар для don_keyhot
8 / 8 / 6
Регистрация: 02.04.2014
Сообщений: 62
03.04.2014, 10:23
после ввода числа, перед вводом строки нужно проигнорировать "/n"

C++
1
2
3
4
5
6
7
8
9
10
11
    
    for (int i = 0; i<n; i++)
        list[i] = new char[size -1];
    
    cin.ignore(); //+ после ввода числа проигнорировать "/n" сидящий в буфере
 
    for (int i = 0; i<n; i++)
    {
        cout << " Ведите текст: ";
        cin.getline(list[i], size); // НЕ РАБОТАЕТ!
    }
Добавлено через 20 минут
fmtuner, наверное, вернее сказать это getline() хавает интер, нажатый после последнего cin'а
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
03.04.2014, 11:14  [ТС]
Цитата Сообщение от don_keyhot Посмотреть сообщение
C++
1
list[i] = new char[size -1];
Почему size -1????

Добавлено через 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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleOutputCP(1251);
 
    system("cls");
    int n, size;
    cout << " Введите количество рядков: ";
    cin >> n;
    cout << " Введите размер рядков: ";
    cin >> size;
    //Сначала объявляется указатель второго  порядка char **list, который ссылается на массив указателей char*[n]
    char **list = new char*[n];
    for(int i=0; i<n; i++)
        list[i] = new char[size];
 
    fflush(stdin);
    for(int i=0; i<n; i++)
    {
        cout << " Ведите текст: ";
        cin.getline(list[i],size);
    }
 
    for(int i=0; i<n; i++)
    {
        cout << list[i]<< endl;
    }
 
    //освобождение выделеной под массив памяти.
    for(int i=0; i<n; i++)
        delete [] list[i];
    delete [] list;
    return 0;
}
Нужна функция какая будет сравнивать и сортировать строки по количеству символов.
При этом сортировка должна происходит с помощью указателей (как я понял, без перемещения самих строк)
0
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 11:49
а в си массивы и так передаются через указатели.
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
03.04.2014, 11:50  [ТС]
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 <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleOutputCP(1251);
 
    system("cls");
    int n, size;
    cout << " Введите количество рядков: ";
    cin >> n;
    cout << " Введите размер рядков: ";
    cin >> size;
    //Сначала объявляется указатель второго  порядка char **list, который ссылается на массив указателей char*[n]
    char **list = new char*[n];
    for(int i=0; i<n; i++)
        list[i] = new char[size];
 
    fflush(stdin);
    for(int i=0; i<n; i++)
    {
        cout << " Ведите текст: ";
        cin.getline(list[i],size);
    }
 
 
    for(int i=0; i<n; i++)
        cout << list[i] << " adress = " << sizeof(list[i]) << endl;
 
    [B]char *add[n];[/B] // указатель на адрес строк
 
    [B]for(int i=0; i<n; i++)
       add[i]=list[i];[/B] // вот так в add[i] что скопируется? адреса строк или само строки???
 
    for(int i=0; i<n; i++)
        cout << add[i] << " adress = " << sizeof(add[i]) << endl;
 
 
    //освобождение выделеной под массив памяти.
    for(int i=0; i<n; i++)
        delete [] list[i];
    delete [] list;
    return 0;
}
По заданию, я должен сделать двумерный массив char, записать в него строки, потом создать массив указателей на char и записать в него адреса строк. И уже его использовать для сортировки.

Так вот вопрос: имеет ли это смысл в моем коде? У меня же получается, выделяется память под строки, на какую изначально указывает массив указателей, ВЕРНО? (вот я проверял, у всех размер 4 байта, как и положено для указателя, я так думаю))) )
Раз так, тогда для сортировки я могу использовать первый массив **list и переписываться будут только адреса, а не сами строки????
help me=)
Миниатюры
Программа для сортировки массива строк  
0
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 11:51
andreyananas, а какие условия сортировки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.04.2014, 11:51
Помогаю со студенческими работами здесь

Программа для сортировки любого массива
Отсортировать любой массив. Создать программу для отсортировки любого массива.

Программа для сортировки одномерного массива нуждается в доработке
var A:array of integer; i, Res:integer; f:boolean; begin for i:=1 to 5 do begin write ('Элемент ', i,...

Процедура сортировки строк двумерного массива
Напишите, пожалуйста, процедуру (Не обязательно всю программу) сортировки строки двумерного массива по возрастанию.

Переделать код для сортировки массива на код для сортировки двумерной матрицы
возникла проблема, не могу переделать код для сортировки массива на код для сортировки двумерной матрицы. вот исходный код void...

Не работает программа сортировки массива
Помогите найти ошибку program pas1; var i, j, n, k, t: integer; ax: array of integer; c: array of integer; sum: array of...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru