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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Salty_Sugar
26 / 26 / 1
Регистрация: 02.04.2012
Сообщений: 140
#1

Сортировка имен с помощью qsort; - C++

10.05.2012, 10:25. Просмотров 705. Ответов 8
Метки нет (Все метки)

Вот программа которую я нашел здесь:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

int cmp_func(const void *a, const void *b){
return strcmp(*(char**)a, *(char**)b);
}

#define MAX_LEN 128
int main(void)
{
setlocale(LC_ALL, "rus");
int num=5, i;
char **arr, buf[MAX_LEN], *p;

if ( ( arr = (char**) calloc(num, sizeof(char*)) ) == NULL ) exit(1);

for ( i = 0; i < num; ++i ){
if ( ! fgets(buf, MAX_LEN, stdin) ) exit(1);

if ( p = strrchr(buf, '\n') )
*p = '\0';
if ( ! *buf ) exit(1);

if ( ( arr[i] = strdup(buf) ) == NULL ) exit(1);
}

qsort(arr, num, sizeof(char*), cmp_func);

for ( i = 0; i < num; ++i )
printf("%s\n", arr[i]);

for ( i = 0; i < num; ++i )
free(arr[i]);
free(arr);

exit(0);
}

Вопрос: как сделать, чтобы переменная num вводилась с клавиатуры? Я пробовал просто scanf("%i",&num); Не помогло...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 10:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка имен с помощью qsort; (C++):

сортировка qsort - C++
Есть динамический массив, содержащий строки в строках слова, формат такой аа бб вв гг Как сделать сортировку по алфавиту этого...

Сортировка qsort - C++
Доброго времени суток, уже применял qsort для сортировки цифр, но не могу найти его для алфавита. Необходимо распределить предложения в...

Можно ли строку (типа string) отсортировать с помощью qsort? - C++
Как можно строку a (типа string) отсортировать с помощью qsort, или это не возможно? На это ... int compare (const void * a, const...

сортировка qsort в классе - C++
Здравствуйте! Все никак не получается, решил обратиться за помощью. Как мне отсортировать массив объектов класса по полю Num c помощью...

Сортировка вектора QSort - C++
Есть сортировка массива: template&lt;class T&gt; void quickSortR(T* a, long N) { // На входе - массив a, a - его последний элемент. ...

Выполнить сортировку массива с помощью стандартной функции быстрой сортировки qsort - C++
2. Выполнить сортировку массива с помощью стандартной функции быстрой сортировки qsort, прототип которой находится в заголовочном файле...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IceSqueez
Java, C# - Expert
67 / 67 / 2
Регистрация: 09.08.2011
Сообщений: 284
10.05.2012, 10:50 #2
Пробуй так:

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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int cmp_func(const void *a, const void *b){
return strcmp(*(char**)a, *(char**)b);
}
 
#define MAX_LEN 128
int main(void)
{
setlocale(LC_ALL, "rus");
int num;
cout << "Please enter num: " << endl;
cin >> num;
char **arr, buf[MAX_LEN], *p;
 
if ( ( arr = (char**) calloc(num, sizeof(char*)) ) == NULL ) exit(1);
 
for (int i = 0; i < num; ++i ){
if ( ! fgets(buf, MAX_LEN, stdin) ) exit(1);
 
if ( p = strrchr(buf, '\n') )
*p = '\0';
if ( ! *buf ) exit(1);
 
if ( ( arr[i] = strdup(buf) ) == NULL ) exit(1);
}
 
qsort(arr, num, sizeof(char*), cmp_func);
 
for (int i = 0; i < num; ++i )
printf("%s\n", arr[i]);
 
for (int i = 0; i < num; ++i )
free(arr[i]);
free(arr);
 
exit(0);
}
1
Salty_Sugar
26 / 26 / 1
Регистрация: 02.04.2012
Сообщений: 140
10.05.2012, 10:57  [ТС] #3
IceSqueez, нет. Сразу завершилась. Но спасибо за попытку)
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.05.2012, 11:09 #4
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int cmp_func(const void *a, const void *b){
return strcmp(*(char**)a, *(char**)b);
}
 
#define MAX_LEN 128
int main(void)
{
setlocale(LC_ALL, "rus");
int num=0, i;
char **arr, buf[MAX_LEN], *p;
scanf("%d", &num);
 
if ( ( arr = (char**) calloc(num, sizeof(char*)) ) == NULL ) exit(1);
 
for ( i = 0; i < num; ++i ){
if ( ! fgets(buf, MAX_LEN, stdin) ) exit(1);
 
if ( p = strrchr(buf, '\n') )
*p = '\0';
if ( ! *buf ) exit(1);
 
if ( ( arr[i] = strdup(buf) ) == NULL ) exit(1);
}
 
qsort(arr, num, sizeof(char*), cmp_func);
 
for ( i = 0; i < num; ++i )
printf("%s\n", arr[i]);
 
for ( i = 0; i < num; ++i )
free(arr[i]);
free(arr);
 
exit(0);
}
1
Salty_Sugar
26 / 26 / 1
Регистрация: 02.04.2012
Сообщений: 140
10.05.2012, 11:39  [ТС] #5
ForEveR, тоже спасибо за попытку). опять после ввода числа программа закончилась...
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.05.2012, 11:48 #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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int cmp_func(const void *a, const void *b){
return strcmp(*(char**)a, *(char**)b);
}
 
#define MAX_LEN 128
int main(void)
{
setlocale(LC_ALL, "rus");
int num=0, i;
char **arr, buf[MAX_LEN], *p;
scanf("%d\n", &num);
 
if ( ( arr = (char**) calloc(num, sizeof(char*)) ) == NULL ) exit(1);
 
for ( i = 0; i < num; ++i ){
if ( ! fgets(buf, MAX_LEN, stdin) ) exit(1);
if ( p = strrchr(buf, '\n') )
*p = '\0';
if ( ! *buf ) exit(1);
 
if ( ( arr[i] = strdup(buf) ) == NULL ) exit(1);
}
 
qsort(arr, num, sizeof(char*), cmp_func);
 
printf("\n\n");
for ( i = 0; i < num; ++i )
printf("%s\n", arr[i]);
 
for ( i = 0; i < num; ++i )
free(arr[i]);
free(arr);
 
exit(0);
}
Вообще это надо фиксить как-то по другому ( проблема в том, что в потоке остается \n и это условие
C
1
2
if ( p = strrchr(buf, '\n') )
*p = '\0';
просто записывает 0 в *buf).
1
IceSqueez
Java, C# - Expert
67 / 67 / 2
Регистрация: 09.08.2011
Сообщений: 284
10.05.2012, 11:57 #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
39
40
41
42
43
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int cmp_func(const void *a, const void *b){
return strcmp(*(char**)a, *(char**)b);
}
 
#define MAX_LEN 128
int main(void)
{
setlocale(LC_ALL, "rus");
int num;
cout << "Please enter num: " << endl;
cin >> num;
char **arr, buf[MAX_LEN], *p;
 
if ( ( arr = (char**) calloc(num, sizeof(char*)) ) == NULL ) exit(1);
 
for (int i = 0; i < num; ++i ){
if ( ! fgets(buf, MAX_LEN, stdin) ) exit(1);
 
if ( p = strrchr(buf, '\n') )
*p = '\0';
if ( ! *buf ) exit(1);
 
if ( ( arr[i] = strdup(buf) ) == NULL ) exit(1);
}
 
qsort(arr, num, sizeof(char*), cmp_func);
 
for (int i = 0; i < num; ++i )
printf("%s\n", arr[i]);
 
for (int i = 0; i < num; ++i )
free(arr[i]);
free(arr);
 
exit(0);
system ("Pause");
}
Добавлено через 8 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
Вообще это надо фиксить как-то по другому ( проблема в том, что в потоке остается \n и это условие

C++
1
2
if ( p = strrchr(buf, '\n') )
*p = '\0';
просто записывает 0 в *buf).
Это означает конец структуры *p.
1
Salty_Sugar
26 / 26 / 1
Регистрация: 02.04.2012
Сообщений: 140
10.05.2012, 12:01  [ТС] #8
IceSqueez, Спасибо за внимание)
ForEveR, ты чоткий, хоть и националист(судя по авке...).
0
ForEveR
10.05.2012, 12:02     Сортировка имен с помощью qsort;
  #9

Не по теме:

Salty_Sugar, Нет, я не являюсь и никогда не являлся националистом.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2012, 12:02
Привет! Вот еще темы с ответами:

Выполнить сортировку массива с помощью стандартной функции быстрой сортировки qsort - C++
Здравствуйте! прошу вас о помощи! помогите пожалуйста с программой! &quot;Выполнить сортировку массива с помощью стандартной функции быстрой...

Отсортировать в массиве числа с помощью функции qsort по убыванию дробной части - C++
Помогите, пожалуйста. Дан массив вещественных чисел double arr. Отсортируйте в нем числа с помощью функции qsort() по убыванию дробной...

Сортировка записей класса через функцию qsort - C++
Имеется класс. На определённом этапе надо отсортировать его. Записи должны быть размещены в алфавитном порядке по названиям пунктов...

С помощью списка определить три наиболее распространенных среди студентов имен - C++
Помогите, пожалуйста с задачей Сформуваты двунаправленный список строк, каждая из которых состоит из фамилии и имени студента. С...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.05.2012, 12:02
Ответ Создать тему
Опции темы

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