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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
#1

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

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

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

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

Собственно суть проблемы в том, что при попытки сделать массив например char list[n][100]; (n - вводимое количество строк) -- выдает ошибку. Я так понимаю, n - должна быть const, а не переменной.
Но как же тогда сделать вводимое значение количества строк?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2014, 20:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа для сортировки массива строк (C++):

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

Составить программу сортировки массива строк по длине строки - C++
Помогите пожалуйста

Составить программу сортировки массива строк по длине строки - C++
Составить программу сортировки массива строк по длине строки.

Строки. Составить программу сортировки массива строк, введенных пользователем. - C++
Составить программу сортировки массива строк, введенных пользователем. Использовать функцию strcmp ().

Программа сортировки массива методом пузырька - C++
Здравствуйте! Пожалуйста, помогите написать программу! Вот задание: Создать на C++ Builder программу сортировки массива в порядке...

Где тут ошибка? Программа сортировки массива по возрастанию - C++
программа сортирует массив по возрастанию. кусок кода который выполняет сортировку взял с инета. но преп придрался к оформлению и после...

57
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
04.04.2014, 00:48 #31
Вот что получилось.
К тому что было - добавилась инициализация пустого массива list NULLами;
ну и... вроде работает
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <windows.h>
#include <locale>
 
using namespace std;
 
void sort_chars (char **a, int n, int stolb)
{
 
    int arr[n],temp_1;
    char temp;
    int nuli=0;
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<stolb;j++)
        {
            if (a[i][j]==NULL)
            {
               nuli++;
            }
        }
        arr[i]=stolb-nuli;
        nuli=0;
    }
 
    for (int i=0;i<n;i++)
    {
       for (int k=i;k<n;k++){
 
            if (arr[i]<=arr[k])
            {
                    temp_1=arr[i];
                    arr[i]=arr[k];
                    arr[k]=temp_1;
                for (int j=0;j<stolb;j++)
                {
                    temp=a[i][j];
                    a[i][j]=a[k][j];
                    a[k][j]=temp;
                }
            }
        }
    }
 
}
 
int main()
{
    setlocale(LC_ALL,"RUS");
      int n, size;
    cout << " Введите количество рядков: ";
    cin >> n;
    cout << " Введите размер строки: ";
    cin >> size; size++;
    cout<<endl;
    //Сначала объявляется указатель второго  порядка 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++)
        for (int j=0;j<size;j++)
            list[i][j]=NULL;
 
 
    cin.ignore();
    for(int i=0; i<n; i++)
    {
        cout << " Ведите текст: ";
        cin.getline(list[i],size);
    }
 
cout<<"Что сформировалось"<<endl;
    for (int i=0; i<n;i++)
    {
        cout<<endl;
        for (int j=0;j<size;j++)
        {
            cout<<list[i][j];
        }
    }
 
    sort_chars(list,n,size);
    cout<<endl<<endl<<"После сортировки"<<endl;
    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
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
04.04.2014, 00:57  [ТС] #32
Цитата Сообщение от fmtuner Посмотреть сообщение
C++
1
2
3
for (int i=0; i<n;i++)
* * * * for (int j=0;j<size;j++)
* * * * * * list[i][j]=NULL;
А зачем это?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6486 / 3130 / 307
Регистрация: 04.12.2011
Сообщений: 8,644
Записей в блоге: 5
04.04.2014, 00:57 #33
Цитата Сообщение от andreyananas Посмотреть сообщение
А можно закомментировать, код?
Элемнентарно. Но обычно после этого не работает. Если хотите понять, - смотрите. Спрашивайте конкретно.
Цитата Сообщение от andreyananas Посмотреть сообщение
и поясни ты мне, как посмотреть адрес на который указывает указатель?
char *ptr = "chupacka";
cout<<(void*)ptr;
Но что это даст? Не значения указателей же нужно сортировать. Нужно записать указатели в соответствии с заданным порядком строк на которые они указывают. Поэтому совершенно неважно что в них было и что будет. Интересней то, как их записать в нужном порядке.
0
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
04.04.2014, 01:00  [ТС] #34
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но что это даст? Не значения указателей же нужно сортировать. Нужно записать указатели в соответствии с заданным порядком строк на которые они указывают. Поэтому совершенно неважно что в них было и что будет. Интересней то, как их записать в нужном порядке.
Это даст возможность проверить правильно я выполнил задание или нет)
0
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
04.04.2014, 01:00 #35
Цитата Сообщение от andreyananas Посмотреть сообщение
А зачем это?
в сортировке надо посчитать количество пустых символов в строке. (длина строки 7, а введено 3 символа например).
0
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
04.04.2014, 01:07  [ТС] #36
Цитата Сообщение от IGPIGP Посмотреть сообщение
char *ptr = "chupacka";
cout<<(void)ptr;
Не хочет даже компилировать(

Добавлено через 1 минуту
Цитата Сообщение от fmtuner Посмотреть сообщение
в сортировке надо посчитать количество пустых символов в строке. (длина строки 7, а введено 3 символа например).
Хм об этом я забыл)
0
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
04.04.2014, 01:12 #37
Цитата Сообщение от andreyananas Посмотреть сообщение
Не хочет даже компилировать(
(void*)ptr;
0
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
04.04.2014, 01:22  [ТС] #38
Что просто p
что (void*)p
одинаковый адрес показывает(
Так это показывает адрес указателя? или адрес на какой указывает указатель?
0
Миниатюры
Программа для сортировки массива строк  
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
04.04.2014, 01:24  [ТС] #39
Цитата Сообщение от IGPIGP Посмотреть сообщение
const size_t
Почему size_t ?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6486 / 3130 / 307
Регистрация: 04.12.2011
Сообщений: 8,644
Записей в блоге: 5
04.04.2014, 04:02 #40
Цитата Сообщение от andreyananas Посмотреть сообщение
Почему size_t ?
Можно и целое со знаком. Если остальное Вам понятно, то проблем нет.
Цитата Сообщение от andreyananas Посмотреть сообщение
Что просто p
что (void*)p
одинаковый адрес показывает(
Если указатель на тип char, не напечатает адрес, а выведет строку.
0
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
04.04.2014, 18:34  [ТС] #41
Цитата Сообщение от fmtuner Посмотреть сообщение
Вот что получилось.
К тому что было - добавилась инициализация пустого массива list NULLами;
ну и... вроде работает
Работает так же как и мое((
Вот я скинул скрин результата, посмотри.
Строки местами поменялись, а адреса остались те же.
А нужно, что бы строка куда записалась, там и осталась, после сортировки.
0
Миниатюры
Программа для сортировки массива строк  
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
04.04.2014, 21:04 #42
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
#include <iostream>
#include <locale>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");
    int n;
    cout << " Введите количество рядков: ";
    cin >> n;
 
    cout<<endl;
 
    string list[n];
 
    cin.ignore();
 
    for(int i=0; i<n; i++)
    {
        cout << " Ведите текст: ";
        cin>>list[i];
    }
 
    cout<<endl<<endl<<"Что сформировалось:"<<endl;
    for (int i=0;i<n;i++)
        cout<<list[i]<<" Адрес строки "<<&list[i]<<endl;
/// сортировка
    for (int i=0;i<n-1;i++)
    {
        for (int j=i;j<n;j++)
        if (list[i].length()<list[j].length())
        {
            list[i].swap(list[j]);
            /*string *adr,*adr2;
            adr=&list[i];
            adr2=&list[j];
            */
        }
    }
    cout<<endl<<endl<<"Что получилось:"<<endl;
    for (int i=0;i<n;i++)
        cout<<list[i]<<" Адрес строки "<<&list[i]<<endl;
 
 
    cout << "Hello world!" << endl;
    return 0;
}
вот тебе
0
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
04.04.2014, 21:18  [ТС] #43
swap

length


а это что?
0
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
04.04.2014, 21:46 #44
http://www.cplusplus.com/reference/s...ing/?kw=string

Добавлено через 13 минут
если без свапа, то наверное вот так надо:
C++
1
2
3
4
5
6
            string temp_str;  //переменная в которой хранится данное строки
            temp_str=list[i]; //
            string *adr=&list[i]; // присвоили adr"у адрес i-ой строки
            string *adr2=&list[j]; // присвоили adr2"у адрес j-ой строки
            *adr=list[j]; // присвоили значению хранящемуся в adr'e (i-ой строке) значение j-ой строки
            *adr2=temp_str; // тоже самое только для adr2
0
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
04.04.2014, 22:59  [ТС] #45
Цитата Сообщение от fmtuner Посмотреть сообщение
если без свапа, то наверное вот так надо:
а почему в string ???
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 22:59
Привет! Вот еще темы с ответами:

Программа для сортировки - C++
Здраствуйте, необходимо написать программу в которуй будет 12 случайных элементов, затем нужно будет сложить рядом стоящие элементы, и...

Составить программу для сортировки данного набора строк по символу - C++
Составить программу для сортировки данного набора строк по символу с номером k&gt;0. Значение k не превосходит длины с самой короткой строки...

Программа для поиска соответствие строк, учитывая регистр, в текстовом файле с 10000+ строк - C++
Уважаемые форумчане, прошу у вас помощи я неделю в поисках. Мне нужна программа или код для поиска слов, очень похожую на расширение Pearls...

Два счетчика для обмена и сравнений для сортировки массива - C++
написал два счетчика для обмена и сравнений для сортировки массива.Проблема при выводе выводится сначала кучу чисел сортировки и обмена,а...


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

Или воспользуйтесь поиском по форуму:
45
Yandex
Объявления
04.04.2014, 22:59
Ответ Создать тему
Опции темы

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