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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
02.04.2014, 20:56     Программа для сортировки массива строк #1
Нужно написать программу для сортировки строк, используя указатели.

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

Собственно суть проблемы в том, что при попытки сделать массив например char list[n][100]; (n - вводимое количество строк) -- выдает ошибку. Я так понимаю, n - должна быть const, а не переменной.
Но как же тогда сделать вводимое значение количества строк?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
02.04.2014, 21:03     Программа для сортировки массива строк #2
динамический массив?
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
02.04.2014, 21:09  [ТС]     Программа для сортировки массива строк #3
Цитата Сообщение от fmtuner Посмотреть сообщение
динамический массив?
Ну да
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
02.04.2014, 21:14     Программа для сортировки массива строк #4
Динамический массив
вот тут рядом тема лежит
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
02.04.2014, 22:41  [ТС]     Программа для сортировки массива строк #5
Цитата Сообщение от fmtuner Посмотреть сообщение
вот тут рядом тема лежит
Создать динамический массив с типом int я могу.
Не получается с типом char!!!!!!!!

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

Добавлено через 52 минуты
Вообщем нужен двумерный динамичный массив для char
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
02.04.2014, 23:17     Программа для сортировки массива строк #6
C++
1
2
char **A = new char*[stroki]
for (int i=0;i<stroki;i++) A[i]=new char[stolbci];
на выходе двумерный массив к которому можно обращаться A[i][j] например.
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
02.04.2014, 23:36  [ТС]     Программа для сортировки массива строк #7
Вот код. С выделением памяти вроде разобрался (хотя у меня 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;
}
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
03.04.2014, 00:32  [ТС]     Программа для сортировки массива строк #8
Текст: "Введите текст:" почему то дублируется(((
Миниатюры
Программа для сортировки массива строк  
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 00:53     Программа для сортировки массива строк #9
C++
1
2
3
4
5
for(int i=0; i<n; i++)
 {
cout << " Ведите текст: ";
 cin.getline(list[i][size],size);// наверное так надо!
 }
ниже по коду тоже самое
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
03.04.2014, 00:57  [ТС]     Программа для сортировки массива строк #10
неа)
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 01:05     Программа для сортировки массива строк #11
Цитата Сообщение от 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
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
03.04.2014, 01:08  [ТС]     Программа для сортировки массива строк #12
я перед циклом ввода fflush(stdin) вставил и дублироваться перестало.

Ну вроде осталось сортировку прикрутить.
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 01:11     Программа для сортировки массива строк #13
бог в помощь
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
03.04.2014, 01:14  [ТС]     Программа для сортировки массива строк #14
Цитата Сообщение от fmtuner Посмотреть сообщение
бог в помощь
)) та вроде сложное позади, правда я не уверен, правильно ли я сделал.
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 01:24     Программа для сортировки массива строк #15
я уверен - ты всё правильно сделал.
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 10:23     Программа для сортировки массива строк #16
после ввода числа, перед вводом строки нужно проигнорировать "/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'а
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
03.04.2014, 11:14  [ТС]     Программа для сортировки массива строк #17
Цитата Сообщение от 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;
}
Нужна функция какая будет сравнивать и сортировать строки по количеству символов.
При этом сортировка должна происходит с помощью указателей (как я понял, без перемещения самих строк)
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 11:49     Программа для сортировки массива строк #18
а в си массивы и так передаются через указатели.
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 806
03.04.2014, 11:50  [ТС]     Программа для сортировки массива строк #19
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=)
Миниатюры
Программа для сортировки массива строк  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 11:51     Программа для сортировки массива строк
Еще ссылки по теме:

Составить программу сортировки массива строк по длине строки C++
Составить программу сортировки массива строк по длине строки C++
C++ Два счетчика для обмена и сравнений для сортировки массива

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

Или воспользуйтесь поиском по форуму:
fmtuner
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
03.04.2014, 11:51     Программа для сортировки массива строк #20
andreyananas, а какие условия сортировки?
Yandex
Объявления
03.04.2014, 11:51     Программа для сортировки массива строк
Ответ Создать тему
Опции темы

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