Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
vero
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 26
1

Почему сортируются цифры в линейном списке, а фамилии не сортируются

23.05.2015, 23:56. Просмотров 278. Ответов 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
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
struct element {
    int x;
    element *next;
};
 
void add(int x, element **head){
    element * t = new element;
    t->x = x;
    t->next = *head;
    *head = t;
}
 
void addLast(int x, element ** head, element **tail) {
    element * t = new element;
    t->x = x;
    t->next = NULL;
    if (*head){
        (*tail)->next = t;
    } else {
        *head = t;
    }
    *tail = t;
}
 
int remove(element **head) {
    int result = (*head)->x;
    element * t = *head;
    *head = t->next;
    delete t;
    return result;
}
 
 
void print(element *head) {
    cout << "------------------------" << endl;
    element * t = head;
    while (t != NULL) {
        if(t->x)
        cout << t->x << " ";
        t = t->next;
    }
    cout << endl << "------------------------" << endl;
}
 
 
void printN(element *head,int y) {
    cout << "------------------------" << endl;
    element * t = head;
    while (t != NULL) {
        if(t->x<y)
        cout << t->x << " ";
        t = t->next;
    }
    cout << endl << "------------------------" << endl;
}
 
void bub(element **  Head) {
    bool change;
    element *t;
 
    do {
       change = false; 
       for (t = *Head;   t->next;  t = t->next)
           {
          if (t->x> t->next->x) 
              {
                int  temp = t->x;
                t->x = t->next->x;
                t->next->x = temp;
                change = true; 
             }         
       }
    } while (change);
 }
 
 
 
 
 
 
 
 
 
 
 
 
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    element *head = NULL;
    element *tail = NULL;
 
    addLast(2, &head, &tail);
    addLast(1, &head, &tail);
    addLast(3, &head, &tail);
    addLast(4, &head, &tail);
    addLast(8, &head, &tail);
 
    print(head);
    int y=5;
    printN(head,y);
    
bub(&head);
   cout << "\nAfter sort :\n";
   print(head);
 
   
 
   
//   
    return 0;
}
 
 
struct book {
    char name[100];
    char author[50];
    int pages;
    int price;
    int yt;
};
 
struct element {
    book x;
    element *next;
};
 
void add(book x, element **head){
    element * t = new element;
    t->x = x;
    t->next = *head;
    *head = t;
}
 
void addLast(book x, element ** head, element **tail) {
    element * t = new element;
    t->x = x;
    t->next = NULL;
    if (*head){
        (*tail)->next = t;
    } else {
        *head = t;
    }
    *tail = t;
}
 
 
 
void print(element *head) {
    cout << "------------------------" << endl;
    element * t = head;
    while (t != NULL) {
        cout << t->x.name<< " | " << t->x.author << " | "
        << t->x.pages << " | " << t->x.price <<"|"<<t->x.yt<< endl;
        t = t->next;
    }
    cout << endl << "------------------------" << endl;
}
 
void printN(element *head,int y) {
    cout << "------------------------" << endl;
    element * t = head;
    while (t != NULL) {
        if(t->x.yt<y)
        cout << t->x.name<< " | " << t->x.author << " | "
        << t->x.pages << " | " << t->x.price <<"|"<<t->x.yt<< endl;
        t = t->next;
    }
    cout << endl << "------------------------" << endl;
}
 
void printS(element *head,char *f) {
    cout << "------------------------" << endl;
    element * t = head;
    while (t != NULL) {
        if(!strcmp(t->x.name,f))
        cout << t->x.name<< " | " << t->x.author << " | "
        << t->x.pages << " | " << t->x.price <<"|"<<t->x.yt<< endl;
        t = t->next;
    }
    cout << endl << "------------------------" << endl;
}
 
 
 
void print(book b) {
    cout << b.name<< " | " << b.author << " | "
    << b.pages << " | " << b.price <<"|"<<b.yt<< endl;
}
 
 
 
 
 
 
 
 
 
 
 
 
void bS(element**head){
    bool change;
    element *t;
    do
        change=false;
        for(t=*head;t->next;t=t->next)
            if(strcmp(t->x.name,t->next->x.name)
            {
                strcpy(char temp,t->x.name);
                strcpy(t->x.name,t->next->x.name);
                strcpy(t->next->x.name,temp);
                change=true;
            }
        
while(change);
}
int main() {
 
    element *head = NULL;
    element *tail = NULL;
 
    book b;
    strcpy(b.name, "C");
    strcpy(b.author, "D");
    b.pages = 100;
    b.price = 1500;
    b.yt=1980;
    addLast(b, &head, &tail);
 
    strcpy(b.name, "C");
    strcpy(b.author, "M");
    b.pages = 300;
    b.price = 2500;
    b.yt=1982;
    addLast(b, &head, &tail);
 
    strcpy(b.name, "K");
    strcpy(b.author, "H");
    b.pages = 120;
    b.price = 1000;
    b.yt=1975;
    addLast(b, &head, &tail);
 
    print(head);
    int y=1982;
    char f[]="D";
    
    printN(head,y);
    printS(head,f);
    bS(&head);
     cout << "\nAfter sort :\n";
   print(head);
    
    
//   
//  
    return 0;
}
Compiling...
lab_99.cpp
lab_99.cpp: In function `void bS(element**)':
lab_99.cpp:98: error: expected `while' before '(' token
lab_99.cpp:98: error: expected `)' before ';' token
lab_99.cpp:98: warning: statement has no effect
lab_99.cpp:98: error: expected `;' before ')' token
 
lab_99.o - 3 error(s), 1 warning(s)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2015, 23:56
Ответы с готовыми решениями:

Сортируются все элементы, кроме первого
Всем привет! Пишу сортировку, но где то закралась ошибка: int A; A = 6; A...

Сортировка двумерного массива. Строки сортируются слева направо, а столбцы сверху вниз
Требуется отсортировать двумерный массив по строкам и по столбцам. Размер...

Ввести пару предложений и создать таблицу, в которой слова сортируются в алфавитном порядке
Вот текст задачи: Первую часть я решил, проблема возникла со второй...

Ошибка в линейном списке
ошибка

Поиск в линейном списке с template
У меня есть класс линейного списка: template &lt;typename T&gt; class List {...

10
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
24.05.2015, 06:03 2
Цитата Сообщение от vero Посмотреть сообщение
Когда я сортирую список из цифр,он сортируется,а когда нужно вывести список книг по алфавиту ,то не сортируется?
Потому, что Си-строки по-другому сравниваются (strcmp()).
0
vero
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 26
24.05.2015, 11:33  [ТС] 3
Не сортируется

c
C++
1
2
3
4
5
6
7
8
9
hange=false;
        for(t=*head;t->next;t=t->next)
            if(strcmp(t->x.name,t->next->x.name>0))
            {
                strcpy(char temp,t->x.name);
                strcpy(t->x.name,t->next->x.name);
                strcpy(t->next->x.name,temp);
                change=true;
            }
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
24.05.2015, 11:36 4
Цитата Сообщение от vero Посмотреть сообщение
Не сортируется
Почитай про функцию strcmp().
0
vero
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 26
24.05.2015, 14:52  [ТС] 5
Прочитала :Функция возвращает несколько значений, которые указывают на отношение строк:
Нулевое значение говорит о том, что обе строки равны.
Значение больше нуля указывает на то, что строка string1 больше строки string2, значение меньше нуля свидетельствует об обратном.

Функция strcmp начинает сравнивать по одному символу и как только будут найдены первые неодинаковые символы, функция проанализирует числовые коды этих символов. Чей код окажется больше, та строка и будет считаться большей.
У меня выдает ошибку строка 208.
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
24.05.2015, 15:23 6
Цитата Сообщение от vero Посмотреть сообщение
Нулевое значение говорит о том, что обе строки равны.
Цитата Сообщение от vero Посмотреть сообщение
if(strcmp(t->x.name,t->next->x.name>0))
{
Тут что написано в параметрах? Проверка на что?
0
vero
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 26
25.05.2015, 21:07  [ТС] 7
Мне не нужно использовать bool?А как тогда сортировать?
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
void bS(element**head,char *temp){
bool change;
    element*t;
    do{
        for(t= *head;t->next;t=t->next)
        {
            if(strcmp(t->x.name>t->next->x.name))
            {
                strcpy(char temp,t->x.name);
                strcpy(t->x.name,t->next->x.name);
                strcpy(t->next->x.name,temp);
            change=true;
            }
        }
    }while(change);
}
int main() {
 
    element *head = NULL;
    element *tail = NULL;
 
    book b;
    strcpy(b.name, "C");
    strcpy(b.author, "D");
    b.pages = 100;
    b.price = 1500;
    b.yt=1980;
    addLast(b, &head, &tail);
 
    strcpy(b.name, "C");
    strcpy(b.author, "M");
    b.pages = 300;
    b.price = 2500;
    b.yt=1982;
    addLast(b, &head, &tail);
 
    strcpy(b.name, "K");
    strcpy(b.author, "H");
    b.pages = 120;
    b.price = 1000;
    b.yt=1975;
    addLast(b, &head, &tail);
 
    print(head);
 
    char temp[20];
    
    
    bS(&head,temp);
     cout << "\nAfter sort :\n";
   print(head);
    
    
//   
//  
    return 0;
}
jklio.cpp
jklio.cpp:3:18: ctdlib: No such file or directory
jklio.cpp: In function `void bS(element**, char*)':
jklio.cpp:61: error: cannot convert `bool' to `const char*' for argument `1' to `int strcmp(const char*, const char*)'
jklio.cpp:63: error: expected primary-expression before "char"
 
jklio.o - 3 error(s), 0 warning(s)
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
25.05.2015, 21:17 8
Что, вообще, пишешь?
Цитата Сообщение от vero Посмотреть сообщение
if(strcmp(t->x.name>t->next->x.name))
Добавлено через 1 минуту
Цитата Сообщение от vero Посмотреть сообщение
Прочитала :
Ещё почитай.
0
vero
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 26
25.05.2015, 22:07  [ТС] 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
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
void bS(element**head,char*temp){
    bool change;
    element *t;
    do{
        change=false;
        for(t=*head;t->next;t=t->next)
        {
            if(strcmp(t->x.name,t->next->x.name))
            {
                strcpy(temp,t->x.name);
                strcpy(t->x.name,t->next->x.name);
                strcpy(t->next->x.name,temp);
                change=true;
            }
        }
}while(change);
}
int main() {
 
    element *head = NULL;
    element *tail = NULL;
 
    book b;
    strcpy(b.name, "C");
    strcpy(b.author, "D");
    b.pages = 100;
    b.price = 1500;
    b.yt=1980;
    addLast(b, &head, &tail);
 
    strcpy(b.name, "C");
    strcpy(b.author, "M");
    b.pages = 300;
    b.price = 2500;
    b.yt=1982;
    addLast(b, &head, &tail);
 
    strcpy(b.name, "K");
    strcpy(b.author, "H");
    b.pages = 120;
    b.price = 1000;
    b.yt=1975;
    addLast(b, &head, &tail);
 
    print(head);
    int y=1982;
    char f[]="D";
    char temp[20];
    printN(head,y);
    printS(head,f);
    bS(&head,temp);
     cout << "\nAfter sort :\n";
   print(head);
    
    
//   
//  
    return 0;
}
C++
1
2
3
4
lab_99.cpp
lab_99.cpp:3:18: ctdlib: No such file or directory
 
lab_99.o - 1 error(s), 0 warning(s)
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
25.05.2015, 22:12 10
Цитата Сообщение от vero Посмотреть сообщение
ctdlib
C++
1
cstdlib
Добавлено через 1 минуту
Цитата Сообщение от vero Посмотреть сообщение
C++
1
2
3
4
5
6
7
if(strcmp(t->x.name,t->next->x.name))
{
strcpy(temp,t->x.name);
strcpy(t->x.name,t->next->x.name);
strcpy(t->next->x.name,temp);
change=true;
}
Это будет работать, если t->x.name не равен t->next->x.name. Это нужно?
0
mymedia
193 / 193 / 120
Регистрация: 27.05.2011
Сообщений: 544
25.05.2015, 22:13 11
Цитата Сообщение от vero Посмотреть сообщение
C++
1
if(strcmp(t->x.name,t->next->x.name))
По-русски: если строчки по адресу t->x.name и t->next->x.name НЕ равны

Какая причина не использовать стандартный класс string?

Добавлено через 1 минуту
Цитата Сообщение от vero Посмотреть сообщение
C++
1
if(strcmp(t->x.name,t->next->x.name>0))
Не там закрывающая скобка
0
25.05.2015, 22:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2015, 22:13

Удаление узла в линейном списке
У меня есть структура (файловая система) , я могу помещать туда файлы (здесь...

Поиск в линейном двусвязном списке
Программа реализует добавление, удаление элементов списка, просмотр списка и...

Программа которая определяет число элементов в линейном списке
Написать программу обхода бинарного дерева Нужно написать, вопросы: 1)На...


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

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

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