Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Alek70694
4 / 4 / 1
Регистрация: 27.10.2012
Сообщений: 252
1

Сортировка по алфавиту

19.05.2016, 17:55. Просмотров 1642. Ответов 9
Метки нет (Все метки)

Не могу сообразить как по алфавиту отсортировать, что нужно изменить?
Если можно, то скажите что не так конкретно в этом коде, другой готовый код не нужен.
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
#include <iostream>
using namespace std;
const int DAYS = 7;
 
int main () 
{
    setlocale(LC_ALL, "Russian");
    // массив указателей на строки
    char* arrptrs[DAYS] = { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница",
                            "Суббота", "Воскресенье" };
    for(int k = 0; k < DAYS; k++) // покажем все строки
        cout << arrptrs[k] << endl;
    for (int i=0; i<7; i++)
        for (int j=0; j<7; j++)
        {
            if (arrptrs[i] <= arrptrs[j])
            {
                char* temp;
                temp = arrptrs[j];
                arrptrs[j] = arrptrs[i];
                arrptrs[i] = temp;
            }
        }
    cout << endl << endl;
    for(int k = 0; k < DAYS; k++) // покажем все строки
        cout << arrptrs[k] << endl;
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2016, 17:55
Ответы с готовыми решениями:

Сортировка по алфавиту
Здравствуйте! Помогите отсортировать содержимое каталога по алфавиту. В этом...

Сортировка по алфавиту
Ввести в компьютер такую информацию об автомобиле: фамилия и инициалы...

Сортировка по алфавиту
На вход подается некоторое количество описаний книг (автор, название,...

Сортировка по алфавиту
На вход подается некоторое количество описаний книг (автор, название,...

Сортировка по алфавиту
Необходимо произвести сортировку по алфавиту по полю name. #include...

9
_Ivana
3236 / 1866 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
19.05.2016, 18:03 2
Ну во-первых, имеет смысл сравнивать все-таки буквы, а не указатели на них (звезды нужны) - сравните
C++
1
if (*arrptrs[i] <= *arrptrs[j])
Во-вторых, все равно результат не тот, потому что неправильный алгоритм сортировки
И в третьих, алгоритм неправильный, потому что сортирует только по первой букве строки, а надо лексикографически по всем буквам слов.
1
Alek70694
4 / 4 / 1
Регистрация: 27.10.2012
Сообщений: 252
19.05.2016, 18:47  [ТС] 3
Цитата Сообщение от _Ivana Посмотреть сообщение
Ну во-первых, имеет смысл сравнивать все-таки буквы, а не указатели на них (звезды нужны) - сравните
Спасибо) Я просто думал, что при сравнении без звезд сравнивает по первой букве по умолчанию.
У понедельника буквы перебираются, тоесть у первого слова. А как у остальных?
*arrptrs[0] - первая буква первого слова
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
19.05.2016, 19:21 4
strcmp() для сравнения.
0
Alek70694
4 / 4 / 1
Регистрация: 27.10.2012
Сообщений: 252
19.05.2016, 22:03  [ТС] 5
Каким образом получить доступ к первой букве второго слова? Или ко второй букве второго слова?

Добавлено через 59 минут
Цитата Сообщение от nmcf Посмотреть сообщение
strcmp() для сравнения.
пример применения strcmp():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int password(void)
{
  char s[80];
 
  printf("Введите пароль: ");
  gets(s);
 
  if(strcmp(s, "pass")) {
    printf("Неверный пароль\n");
    return 0;
  }
  return 1;
}
Не могу сообразить каким образом она поможет в сортировке по алфавиту.
Цитата Сообщение от Alek70694 Посмотреть сообщение
Каким образом получить доступ к первой букве второго слова? Или ко второй букве второго слова?
C++
1
2
arrptrs[1][0] 
arrptrs[1][1]
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
19.05.2016, 22:37 6
В любой сортировке есть сравнение элементов. Для строк - strcmp().
1
Melvil
48 / 47 / 26
Регистрация: 20.05.2015
Сообщений: 251
19.05.2016, 22:44 7
Alek70694, Если вам нужен именно алгоритм лексикографической сортировки, то смотрите посты выше. Я же хочу сказать, что самый оптимальный способ - это создание вектора из std::string и затем применение функции std::sort к этому вектору, займет буквально 2-3 строчки.
1
Alek70694
4 / 4 / 1
Регистрация: 27.10.2012
Сообщений: 252
19.05.2016, 23:16  [ТС] 8
Цитата Сообщение от Melvil Посмотреть сообщение
Alek70694, Если вам нужен именно алгоритм лексикографической сортировки, то смотрите посты выше. Я же хочу сказать, что самый оптимальный способ - это создание вектора из std::string и затем применение функции std::sort к этому вектору, займет буквально 2-3 строчки.
к сожалению понятие не имею, что за вектора, еще не дошел до них
Цитата Сообщение от nmcf Посмотреть сообщение
В любой сортировке есть сравнение элементов. Для строк - strcmp().
понятно, спасибо, к сожалению готовая сортировка мне не нужна, т.к. я хочу разобраться
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
#include <iostream>
using namespace std;
const int N = 4;
 
int main () 
{
    setlocale(LC_ALL, "Russian");
    int a = 0;
    char* massiv[N] = {"Приставка", "Просто", "Правота", "Пила"};
    for (int i=0; i<4; i++) // первое сравниваемое слово
        for (int j=0; j<4; j++) // буква
            for (int k=1; k<4; k++) // второе сравниваемое слово
                if (massiv[i][j] > massiv[k][j]) //если j-ая буква i-ого слова больше j-ой буквы k-ого слова, то меняем местами слова
                {
                    char* temp;
                    temp = massiv[k];
                    massiv[k] = massiv[i];
                    massiv[i] = temp;
                }
    for (int i=0; i<4; i++)
        cout << massiv[i];
    system("pause");
    return 0;
}
Не могу понять как исправить ту же ошибку, что и в прошлом алгоритме.
Как работает по идее:
1) Сравниваем первую "п" букву первого слова с остальными - совпадают, идем дальше
2) Сравниваем вторую "р" букву первого слова с остальными - буква "и" в слове "Пила" меньше, значит меняем местами слова
3) Дальше получается мы уже в слове ПИЛА начинаем третью букву сравнивать с остальными словами?
Как тут быть в этом случае? Возможно начинать сравнивать с самого начала?
Или может кто конкретный алгоритм сказать, не применяя готовые сортировки и вектора.
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
20.05.2016, 08:22 9
Лучший ответ Сообщение было отмечено Alek70694 как решение

Решение

Alek70694, причём тут готовая? strcmp() не сортирует, а только сравнивает. И массив у тебя неправильно задан, его нельзя изменять.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    char massiv[N][20] = {"Приставка", "Просто", "Правота", "Пила"};
    char tmp[20];
 
    for(int i = 0; i < N - 1; ++i)
    {            
        for(int j = 0; j < N - 1; ++j)
        {     
            if (strcmp(massiv[j + 1], massiv[j]) < 0) 
            {
                strcpy(tmp, massiv[j + 1]); 
                strcpy(massiv[j + 1], massiv[j]); 
                strcpy(massiv[j], tmp);
            }
        }
    }
2
Alek70694
4 / 4 / 1
Регистрация: 27.10.2012
Сообщений: 252
22.05.2016, 17:05  [ТС] 10
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
#include <iostream>
using namespace std;
const int N = 7;
 
int main ()
{
setlocale(LC_ALL, "Russian");
int a = 0;
char* massiv[N] = {"Приставка", "Арка", "Правота", "Пила", "Прабабушка", "Папа", "Абзац"};
for (int i=0; i<7; i++)
for (int k=i+1; k<7; k++)
//for (int j=0; j<4; j++)
if (strcmp(massiv[i],massiv[k])>0)
{
char* temp;
temp = massiv[k];
massiv[k] = massiv[i];
massiv[i] = temp;
}
for (int i=0; i<7; i++)
cout << massiv[i];
system("pause");
return 0;
}
Вот еще помогли сделать, возможно кому то понадобится
1
22.05.2016, 17:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2016, 17:05

Сортировка по алфавиту
С клавиатуры ввести автора и название книги и посторить список по алфавиту.

Сортировка по алфавиту
Доброго времени суток, появилась проблема: есть структура, читаю из файла,...

Сортировка по алфавиту
На вход подается некоторое количество описаний книг (автор, название,...


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

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

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