Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
1

Сортировка строк матрицы в алфавитном порядке

04.05.2015, 17:14. Показов 4127. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создаем двумерный динамический массив в котором надо отсортировать строки в алфавитном порядке.

Вот код:

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
void sortirowka(char **mass, int razmer) 
{
    char temp; 
    
    for (int i = 0; i < razmer; i++) {
        for (int j = 0; j < razmer; j++) {
            cout << mass[i][j];
        }
    }
    cout << endl;
 
    
    for (int k = 0; k < razmer; k++) {
        for (int i = 0; i < razmer; i++) {
            if (mass[i][0] > mass[i + 1][0]) 
                for (int j = 0; j < razmer - 1; j++) {
                { 
                    temp = mass[i][j];
                    mass[i][j] = mass[i + 1][j];
                    mass[i + 1][j] = temp;
                }
            }
        }
    }
    
    for (int i = 0; i < razmer; i++) {
        for (int j = 0; j < razmer; j++) {
            cout << mass[i][j];
        }
    }
    cout << endl;
}
Что не так?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2015, 17:14
Ответы с готовыми решениями:

Сортировка строк в алфавитном порядке
Собственно сабж) Вроде бы сделал что-то похожее, но ошибка запрета доступа, если вводить строки с клавиатуры (понимаю, что не выделил...

Сортировка строк в алфавитном порядке
Помогите пожалуйста написать программу для сортировки строк в алфавитном порядке Программа открывает фаил input.txt и отоброжает его...

Сортировка строк в алфавитном порядке (переделать на wstring)
Доброго времени суток. Рыскал по форуму и нашел замечательный код сортировки строк в алфавитном порядке. std::string str; ...

24
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
04.05.2015, 19:03 2
Строки сравниваются с помощью strcmp().
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
04.05.2015, 19:06 3
совершенно неправильный код, особенно

C++ Скопировано
1
2
    for (int i = 0; i < razmer; i++) {
        for (int j = 0; j < razmer; j++) {
, получается у тебя двумерная матрица символов, которую ты выводишь одной строкой!?
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
04.05.2015, 19:20  [ТС] 4
Krock21rus, можете помочь. Можете исправить мой код чтобы он правильно работал?

Добавлено через 7 минут
nmcf, мне надо не сравнить две строки. Мне надо:
Цитата Сообщение от Виталя97 Посмотреть сообщение
отсортировать все строки в алфавитном порядке.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
04.05.2015, 19:28 5
Ну а как сортировать без сравнения? Или ты по первой букве сортируешь?
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
04.05.2015, 19:41  [ТС] 6
nmcf, можете код скинуть?
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
04.05.2015, 22:58 7
обязательно использовать двумерный массив char?
можно ли использовать встроенные сортировки?

Добавлено через 2 минуты
начинаю писать код, в случае если ответы на вопросы это "не обязательно" и "можно"

Добавлено через 50 минут
жаль у меня не такие большие познания в STL, попробовал реализовать со string и qsort, сортируется только если у всех строк одинаковый размер, ну так и должно быть, потом сделал двумерную матрицу с qsort, но всё равно не понятно что не так?

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
#include <iostream>
#include <string>
#include <stdlib.h>
#include <algorithm>
 
using namespace std;
 
const int maxsize = 500;
 
int compare(const void* a,const void* b)
{
    bool isSizeEqual = false;
    if (strlen((char *)a) == strlen((char *)b))
        isSizeEqual = true;
    int size = min(strlen((char *)a), strlen((char *)b));
    bool isminsizeA=true;
    if (size == strlen((char *)b))
        isminsizeA = false;
    if (isminsizeA)
    {
        for (int i = 0; i < size; i++)
        {
            if (*((char *)a + i)>*((char *)b + i))
                return -1;
            else if (*((char *)a + i) < *((char *)b + i))
                return 1;
        }
        if (isSizeEqual)
            return 0;
        else return 1;
    }
    else
    {
        for (int i = 0; i < size; i++)
        {
            if (*((char *)a + i)<*((char *)b + i))
                return -1;
            else if (*((char *)a + i) > *((char *)b + i))
                return 1;
        }
        if (isSizeEqual)
            return 0;
        else return -1;
    }
    return 0;
}
 
int main()
{
    setlocale(0,"Rus");
    cout << "Введите количество строк: ";
    int n;
    cin >> n;
    cout << "Введите " << n << " строк:\n";
    cin.ignore();
    char **s = new char*[n];
    for (int i = 0; i < n; i++)
    {
        s[i] = new char[maxsize];
    }
    for (int i = 0; i < n; i++)
    {
        gets_s(s[i],maxsize-1);
    }
    cout << "==========================\n";
    for (int i = 0; i < n; i++)
    {
        cout << s[i] << endl;
    }
    cout << "==========================\n";
    qsort(s, n, sizeof(char)*maxsize, compare);
    for (int i = 0; i < n; i++)
    {
        cout << s[i] << endl;
    }
    system("pause");
}
Добавлено через 45 секунд
можно вместо массива string использовать vector<string> но это я уже, если и реализую, то не сегодня
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
05.05.2015, 08:06  [ТС] 8
Цитата Сообщение от Krock21rus Посмотреть сообщение
обязательно использовать двумерный массив char?
можно ли использовать встроенные сортировки?
Двумерный динамический массив обязательно. Встроенные сортировки использовать можно.
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
05.05.2015, 08:12  [ТС] 9
Krock21rus, ваш код не работает. Вот фото:
Сортировка строк матрицы в алфавитном порядке
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
05.05.2015, 08:33 10
я и не выкладывал рабочий, в том, который работает со строками равной длины используется string, сейчас реализую через vector

Добавлено через 12 минут
вот,чуть улучшил алгоритм сравнения и изменил сортировку
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
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <assert.h>
 
using namespace std;
 
bool cmp(const string a, const string b)
{
    bool isMinSizeA = true;
    if (((string)a).size() > ((string)b).size())
    {
        isMinSizeA = false;
    }
    int size = min(((string)a).size(), ((string )b).size());
    for (int i = 0; i < size; i++)
    {
        if (a[i] >b[i])
            return false;
        else if (a[i] < b[i])
            return true;
    }
    if (isMinSizeA)
        return true;
    else return false;
}
 
int main()
{
    setlocale(0, "Rus");
    int n;
    cout << "Введите кол-во строк: ";
    cin >> n;
    cout << "Введите строки:\n";
    cin.ignore();
    vector<string> mas(n, "");
    for (int i = 0; i < n; i++)
    {
        getline(cin, mas[i]);
    }
    sort(mas.begin(), mas.end(), cmp);
    for (int i = 0; i < n; i++)
    {
        cout << mas[i] << endl;
    }
    system("pause");
}
Добавлено через 10 секунд
это уже рабочий

Добавлено через 2 минуты
vector - динамический массив,
string - динамический массив, тот же вектор только vector<char>
vector<string> - двумерный динамический массив

Добавлено через 31 секунду
((string)a)
такие конструкции можно заменить просто на а\b
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
05.05.2015, 08:39  [ТС] 11
Krock21rus, все равно не работает.
Сортировка строк матрицы в алфавитном порядке
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
05.05.2015, 17:32 12
Цитата Сообщение от Виталя97 Посмотреть сообщение
Krock21rus, все равно не работает.
почему? вроде отсортировал, может вы не видите просто?, ещё раз код скину, чтобы видно было:
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
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <assert.h>
 
using namespace std;
 
bool cmp(const string a, const string b)
{
    bool isMinSizeA = true;
    if (((string)a).size() > ((string)b).size())
    {
        isMinSizeA = false;
    }
    int size = min(((string)a).size(), ((string )b).size());
    for (int i = 0; i < size; i++)
    {
        if (a[i] >b[i])
            return false;
        else if (a[i] < b[i])
            return true;
    }
    if (isMinSizeA)
        return true;
    else return false;
}
 
int main()
{
    setlocale(0, "Rus");
    int n;
    cout << "Введите кол-во строк: ";
    cin >> n;
    cout << "Введите строки:\n";
    cin.ignore();
    vector<string> mas(n, "");
    for (int i = 0; i < n; i++)
    {
        getline(cin, mas[i]);
    }
    sort(mas.begin(), mas.end(), cmp);
    cout << "А ВОТ ЭТОТ ОТСОРТИРОВАННЫЙ МАССИВ СТРОК!!!:\n";
    for (int i = 0; i < n; i++)
    {
        cout << mas[i] << endl;
    }
    system("pause");
}
Добавлено через 59 секунд
он сортирует так, что начинающиеся с символов, у которых код меньше, ставятся вверху
если нужен другой алгоритм сравнения то подправьте

Добавлено через 19 секунд
то есть в алфавитном порядке
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
05.05.2015, 19:03  [ТС] 13
Krock21rus, я конечно извиняюсь, но ваш код все равно не работает. Вот:
Сортировка строк матрицы в алфавитном порядке
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
05.05.2015, 19:15  [ТС] 14
Krock21rus, вот мой код который работает,
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
void sortirowka(char **mass, int razmer) 
{
    int n, i, w; 
    char tmp; 
 
    cout << "Выберите строку (от 1 до 2 )"; 
    cin >> n;
    n--;
    
    for (i = 0; i < strlen(mass[n]); i++)
    {
        cout << mass[n][i];
    }
    
    for (w = 0; w < strlen(mass[n]); w++)
    {
        for (h = 0; h < strlen(mass[n]) - 1; h++)
        {
            if (mass[n][h] > mass[n][h + 1]) 
            { 
                tmp = mass[n][h];
                mass[n][h] = mass[n][h + 1];
                mass[n][h + 1] = tmp;
            }
        }
    }
 
    for (i = 0; i < strlen(mass[n]); i++)
    {
        cout << mass[n][i];
    }
}
Только вот он сортирует только одну стоку, а мне надо что бы он сортировал все строки. Понимаю что надо переделать циклы но как не могу понять.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
05.05.2015, 21:33 15
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 <string.h>
#include <iostream>
#include <algorithm>
#include <windows.h>
 
using namespace std;
 
const int MaxLen=250; //Максимальная длина строки
 
bool StringCompare( char* a, char* b){
    return strcmp(a, b)<0;   //Если наоборот, менять знак
}
 
int main()
{
    setlocale(LC_ALL,"");     //Для русского, если надо, то нужно менять строчки с setlocal 
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    // char* Arr[5]={  "abc bac","bac cad","abc cad","cab abc","abc aac"  };
    
    
    int N; //КОличество строк
    char **Arr=nullptr; //Указатель на начало массива слов
 
    cout<<"Введите количество строк\n";
    (cin>>N).get();
 
 
    Arr=new char*[N]; //Определили N строк
    for (int i=0;i<N;i++) {
        Arr[i]=new char[MaxLen+1];
        cin.getline(Arr[i],MaxLen);  //Берем слово сразу при создании
    }
        
    sort(&Arr[0],&Arr[N],StringCompare);   //Сортируем
 
    cout<<"\n=============\nРЕЗУЛЬТАТ\n=============\n";
 
    
    
    for (int i=0;i<N;i++) cout<<Arr[i]<<"\n";
    cout<<"=============\n";
 
    cin.get();
 
}
1
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
06.05.2015, 07:44 16
Так вам нужна не сортировка массива строк!
Вам нужна сортировка символов в строке!
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
06.05.2015, 09:46  [ТС] 17
Krock21rus,
Цитата Сообщение от Krock21rus Посмотреть сообщение
Так вам нужна не сортировка массива строк!
Вам нужна сортировка символов в строке!
Ну да мне нужна сортировка символов во всех стоках.

Добавлено через 16 минут
daslex, мне не нужна сортировка массива строк. А мне нужна сортировка символов в строке.
0
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
06.05.2015, 09:54 18
Цитата Сообщение от Виталя97 Посмотреть сообщение
мне не нужна сортировка массива строк. А мне нужна сортировка символов в строке.
каким методом?
перебор, пузырек, вычерпывания...?
что конкретно не получается??
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
06.05.2015, 10:03  [ТС] 19
Krock21rus, daslex, Fallenworld,
Цитата Сообщение от Виталя97 Посмотреть сообщение
отсортировать строки по возрастанию
Невнимателен я все таки мне надо сортировка массива строк. Только вот не могу понять что значит.
Цитата Сообщение от Виталя97 Посмотреть сообщение
отсортировать строки по возрастанию
Это надо чтобы программа выводила с самой маленькой строки до самой большой в порядке возрастания. Или оно должно сортировать строки в алфавитном порядке по первой букве как здесь:
Сортировка строк матрицы в алфавитном порядке
0
 Аватар для Виталя97
2 / 2 / 3
Регистрация: 04.05.2015
Сообщений: 93
06.05.2015, 10:06  [ТС] 20
Fallenworld,
Цитата Сообщение от Fallenworld Посмотреть сообщение
Каким методом?
Пузырек.
Цитата Сообщение от Fallenworld Посмотреть сообщение
Что конкретно не получается??
Вот у меня есть функция сортировка пузырьком:
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
void sortirowka(char **mass, int razmer) 
{
    int n, i, w; 
    char tmp; 
 
    cout << "Выберите строку (от 1 до 2 )"; 
    cin >> n;
    n--;
    
    for (i = 0; i < strlen(mass[n]); i++)
    {
        cout << mass[n][i];
    }
    
    for (w = 0; w < strlen(mass[n]); w++)
    {
        for (h = 0; h < strlen(mass[n]) - 1; h++)
        {
            if (mass[n][h] > mass[n][h + 1]) 
            { 
                tmp = mass[n][h];
                mass[n][h] = mass[n][h + 1];
                mass[n][h + 1] = tmp;
            }
        }
    }
 
    for (i = 0; i < strlen(mass[n]); i++)
    {
        cout << mass[n][i];
    }
}
Проблема в том что он сортирует только одну стоку, а мне надо что бы он сортировал все строки. Понимаю что надо переделать циклы но как не могу понять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2015, 10:06
Помогаю со студенческими работами здесь

Сортировка массива строк по первым буквам в алфавитном порядке
Есть некоторые проблемы с реализацией этой простой задачи. После ввода последней строки прога вылетает. Код: #include...

Сортировка строк матрицы в порядке возрастания их средних арифметических значений
Необходимо строки матрицы переставить в порядке возрастания их средних арифметических значений. Вот что у меня получилось: int n =...

Сортировка массива строк в алфавитном порядке
Здравствуйте. У меня такой вопрос. Как можно переписать этот кусок кода, отвечающий за сортировку массива строк в алфавитном порядке, не...

Сортировка строк в обратном алфавитном порядке
Подскажите, какую процедуру использовать, чтобы отсортировать строки в обратном алфавитном порядке

Сортировка строк в обратном алфавитном порядке
Задача:Напишите процедуру сортировки строк в обратном алфавитном порядке. Код: { class Program { static void...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Простая нейросеть на КуМир: Создание и обучение
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
Исполнитель Водолей в КуМир: Решение задач
EggHead 16.03.2025
Разработка алгоритмического мышления — одна из ключевых задач для начинающих программистов, и система КуМир предлагает отличный способ погрузиться в этот процесс. Среди множества исполнителей в этой. . .
Исполнитель Чертежник в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы можете рисовать на бесконечной координатной плоскости, перемещая точку, которая оставляет след. По вашей команде она может поднять перо и двигаться, не оставляя следа, или. . .
Исполнитель Робот в КуМир: Решение задач
EggHead 16.03.2025
КуМир (Комплект Учебных МИРов) — это учебная среда программирования, разработанная специально для обучения базовым концепциям алгоритмизации. Её главная фишка — использование русскоязычного. . .
Исполнитель Черепаха в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы впервые учитесь программировать, а перед вами стоит задача заставить маленькую виртуальную черепашку рисовать на экране. Звучит забавно? Эта идея зародилась ещё в 1967 году, когда. . .
Конвейеры данных с Apache Kafka
Javaican 16.03.2025
В мире, где данные стали новой нефтью, Apache Kafka зарекомендовал себя как мощный инструмент для построения надежных и масштабируемых конвейеров данных. Созданный изначально командой LinkedIn в 2011. . .
Deno против Node.js: Будущее JavaScript рантайма
run.dev 16.03.2025
За последнее десятилетие Node. js стал абсолютным лидером среди JavaScript-рантаймов и фактическим стандартом для серверной разработки на JavaScript. Но в 2018 году тот же разработчик, который создал. . .
SwiftUI или UIKit - что выбрать для нового приложения iOS?
mobDevWorks 16.03.2025
Когда Apple представила SwiftUI на WWDC 2019, многим показалось, что дни UIKit сочтены. Новый декларативный фреймворк предлагал радикально иной подход к разработке интерфейсов. Вместо кропотливого. . .
Docker: Руководство для начинающих по созданию первого приложения
Mr. Docker 16.03.2025
Docker — это платформа, которая упаковывает ваше приложение и все его зависимости в стандартизированные блоки, называемые контейнерами. Эти контейнеры изолированы друг от друга и от основной системы,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер