Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 98
1

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

24.03.2017, 22:25. Показов 1388. Ответов 11
Метки нет (Все метки)

Правильные глаголы находятся и все нормально выводится, но сортировка по алфавиту не работает почему-то. В чем ошибка?




C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for (int i = 0; i < n; i++) // выводим правильные глаголы
        {
            
            int K = arr.form2[i].compare(arr.form2[i].length()-2 , 2, corverb1, 0, 2);
 
            if (K == 0)
                cont[n] += arr.form2[i];
            else
                continue;
            
            for (int j = i + 1; i < n; i++)
            {
                if (cont[i] > cont[j])
                {
                    swap = cont[i];
                    cont[i] = cont[j];
                    cont[j] = swap;
                }
            }
        }
        cout << cont;
        cout << "\n\n Неправильные глаголы: ";
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2017, 22:25
Ответы с готовыми решениями:

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

Сортировка по алфавиту
Доброго времени суток. Имеется задача: Описать структуру с именем ORDER, содержащую следующие...

Сортировка по алфавиту
Вот программа , там сортировка по нумерации поездов, а нужна по ПУНКТАМ назначения, кто знает...

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

11
nmcf
24.03.2017, 23:23
  #2

Не по теме:

Мы должны угадывать, что вообще происходит?

0
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 98
25.03.2017, 16:34  [ТС] 3
Нет, вот весь код, там просто отрывок. Какая разница в принципе, весь или нет, если нужна сама сортировка по алфавиту. Должно отсортироваться 2 слова. Но пишет ошибку, что идет преобразование из string в char



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
struct verbs
{
    string form1[6] = { "cost", "work", "slip", "write", "drive", "put" };
    string form2[6] = { "cost", "worked", "slipped", "wrote", "drove", "put" };
    string form3[6] = { "cost", "worked", "slipped", "written", "driven", "put" };
};
 
 
void distr(int n, verbs arr);
 
int main()
{
    setlocale(LC_ALL, "rus");
    verbs array;
    int N = 6;
    distr(N, array);
 
 
    _getch();
    return 0;
}
 
void distr(int n, verbs arr)
{
    int const N = 6;
    string mass1 = { "" };
    string corverb1 = { "ed" };
    string corverb2 = { "en" };
    string cont[N] = { "" }, swap;
    string cont2[N] = { "" };
 
    //-----------------------------------------------------------------------------------
    cout << "\n Глаголы, одинаковые во всех формах: ";
    for (int i = 0; i < n; i++)
    {
 
        if ((arr.form1[i] == arr.form2[i]) && (arr.form2[i] == arr.form3[i]))
        {
            mass1 = arr.form1[i];
            cout << " " << mass1;
        }
        else
            continue;
 
    }
    //----------------------------------------------------------------------------------
    cout << "\n\n Правильные глаголы: ";
 
    for (int i = 0; i < n; i++) // выводим правильные глаголы
    {
 
        int K = arr.form2[i].compare(arr.form2[i].length() - 2, 2, corverb1, 0, 2);
 
        if (K == 0)
            cont[n] += arr.form2[i];
        else
            continue;
 
        for (int j = i + 1; i < n; i++)
        {
            if (strcmp(cont[i], cont[j]) > 0)
            {
                swap = cont[i];
                cont[i] = cont[j];
                cont[j] = swap;
                cout << cont[i];
            }
        }
    }
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
25.03.2017, 16:42 4
Что именно ты хочешь отсортировать? Эти массивы в структуре?

Если cont, то нужно это делать отдельно от цикла заполнения, и в 55-й строке должно быть присвоение очередному элементу с отдельной индексацией.
1
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 98
25.03.2017, 18:46  [ТС] 5
То есть отдельно от этого цикла, так? Спасибо про 55 строчку, не заметил.



C++
1
2
3
4
5
6
7
8
9
for (int i = 0; i < n; i++) // выводим правильные глаголы
    {
 
        int K = arr.form2[i].compare(arr.form2[i].length() - 2, 2, corverb1, 0, 2);
 
        if (K == 0)
            cont[n] += arr.form2[i];
        else
            continue;
Добавлено через 8 минут
Дан список английских глаголов: тип (правильный/неправильный), первая
форма, вторая форма, третья форма. Вывести только те глаголы, у которых
все три формы совпадают. Вывести только правильные (неправильные) гла-
голы в алфавитном порядке. - Это задача.

у меня правильные глаголы нормально отсортировались от всех остальных. Но выводятся не в алфавитном порядке, а мне нужно, чтобы в алфавитном порядке выводились.
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
25.03.2017, 19:04 6
Цитата Сообщение от Tanya228 Посмотреть сообщение
у меня правильные глаголы нормально отсортировались от всех остальных.
Как ты это выяснил? У тебя выход за границу массива. И откуда там strcmp() для древних строк?
C++
1
2
3
4
5
6
7
8
9
    int j = 0;
    for (int i = 0; i < n; i++) // выводим правильные глаголы
    {
 
        if (arr.form2[i].compare(arr.form2[i].length() - 2, 2, corverb1, 0, 2) == 0)
            cont[j++] = arr.form2[i];
    }
 
    std::sort(cont, cont + j);

Не по теме:

"не заметил" и Tanya228 - подозрительно выглядит. :)

1
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 98
13.04.2017, 22:32  [ТС] 7
Я просто вывел все, что отсортировал и все нормально вывелось. Но когда алфавит пытаюсь сделать - не работает. А если не strcmp(), то что? Девушка создала профиль давно, я вот зашел через ее профиль, чтобы свой не создавать.
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
13.04.2017, 22:38 8
string сравнивают обычным способом, как числа.
0
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 98
13.04.2017, 23:00  [ТС] 9
Да, я знаю. Так, ладно, с той фигней я разобрался. Убрал cont и просто когда он находил нужное слово, то сравнивал его с последующими и все вышло. А ты не знаешь как подключить свой заголовочный файл. По книге Липпмана занимаюсь, нужно подключить заголовочный файл .h. Добавлял его как класс и как существующий элемент, но пишет одно и тоже - не удается открыть источник файл "Sales_item.h"
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
13.04.2017, 23:52 10
Файл где находится? В той же папке, что и сама программа?
0
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 98
14.04.2017, 20:11  [ТС] 11
Все, уже разобрался, спасибо)
0
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
12.06.2017, 00:27 12
Зачем нужны всякие какашки типа 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
25
26
27
28
29
auto comp(std::string s1, std::string s2)
{
    return s2 > s1;
}
 
template<class InputIterator, class BinaryPred = std::greater<>>
void quick_sort(InputIterator first, InputIterator last, BinaryPred pred = BinaryPred())
{
    InputIterator base = first, new_last = last;
    if (first != last && first++ != --last) {
        while (first != last) {
            while (first != last && !pred(*first, *base)) ++first;
            while (first != last && pred(*last, *base))   --last;
            if (first != last) std::iter_swap(first, last);
        }
        if (pred(*base, *first)) std::iter_swap(base, first);
        quick_sort(base, first, pred);
        quick_sort(first, new_last, pred);
    }
}
 
int main()
{
    std::vector<std::string> v = {"aza", "azac", "azw", "baac"};
    quick_sort(v.begin(), v.end(), comp);
    for (auto& s : v)
        std::cout << s << ' ';
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2017, 00:27

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

Сортировка по алфавиту
Имееться файл с данными о читателях: Savchuk:Lida:Ivanovna:1956:56953247:4:0:1:500:...

сортировка по алфавиту
Задача: Описать структуру с именем PRICE, содержащую следующие поля: название товара; ...

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


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

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

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