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

Сортировка значений типа char - C++

Восстановить пароль Регистрация
 
wildfires
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 114
21.04.2012, 00:14     Сортировка значений типа char #1
Здравствуйте, есть у меня структура: ФИО ученика и класс в котором он учится.
Класс состоит из цифры и буквы. Как можно отсортировать данные по классам в порядке: 9А, 9B, 9C, 10A и т.д. ?

Добавлено через 17 минут
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
struct school
{char pib[60];
char n[3];
}x;FILE *f;char name[30];
void enter()
{
char t[5];
if ((f=fopen(name,"w"))==NULL) {cout<<"Fail ne isnue";
getch();
return;}
gets(x.pib);
while (1)
{cout<<"PIB:";
gets(x.pib);
cout<<"Klass:";
gets(x.n);
fwrite(&x,sizeof(x),1,f);
cout<<"Dodatu novogo ychnya y/n\n";
gets(t);
if (!strcmp(t,"n")) break;
}
fclose(f);
}
 
void watch()
{
if ((f=fopen(name,"r"))==NULL) {cout<<"Fail ne isnue";getch();return;}
while (fread(&x,sizeof(x),1,f))
cout<<"\nPIB:"<<x.pib<<"\nKlass: "<<x.n;
fclose(f);
getch();
}
 
void dop()
{char t[5];
if ((f=fopen(name,"a"))==NULL) {cout<<"Fail ne isnue";getch();return;}
gets(x.pib);
while (1)
{cout<<"PIB:";
gets(x.pib);
cout<<"Klass:";
gets(x.n);
fwrite(&x,sizeof(x),1,f);
cout<<"Dodatu novogo ychnya? y/n\n";
gets(t);
if (!strcmp(t,"n")) break;
}
fclose(f);
}
 
void del()
{if ((f=fopen(name,"r"))==NULL) {cout<<"Fail ne isnue";getch();return;}
FILE *f1;
char t[5];
f1=fopen("dop","w");
gets(x.pib);
while (fread(&x,sizeof(x),1,f))
{cout<<"\nPIB:"<<x.pib<<"\nKlass: "<<x.n;
cout<<"\nVudalutu? y/n\n";
gets(t);
if (!strcmp(t,"n")) fwrite(&x,sizeof(x),1,f1);
}
fcloseall();
unlink(name);
rename("dop",name);
}
 
 
 
int main(void)
{int t;
 
cout<<"Vvedite imya faila: ";
gets(name);
while (1)
{ clrscr();
cout<<"Dodatu informaciy pro ychniv 1\nPEreglyad informacii 2\nDodatu informaciy y fail 3\nVudalennya danux 6\nVuxid 7\nVuberut` regum: ";
cin>>t;
switch (t)
{case 1:{enter();break;}
case 2:{watch();break;}
case 3:{dop();break;}
case 6:{del();break;}
case 7:exit(1);
default:{cout<"\nNe vubran regum";getch();}
}
}
}
Вот моя программа, нужно добавить функцию, которая будет отсортировать учеников по классам как я написал выше.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Black-millenium
 Аватар для Black-millenium
23 / 23 / 1
Регистрация: 26.11.2011
Сообщений: 157
21.04.2012, 00:17     Сортировка значений типа char #2
Так же, как сортировал бы цифры. у char есть коды символов, поэтому операции отношения и арифметические операции к ним вполне допустимы. Да-да, их можно складывать, вычитать, умножать, делить по модулю, сравнивать и еще что-то.
wildfires
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 114
21.04.2012, 01:19  [ТС]     Сортировка значений типа char #3
Ну вот я пробую добавить функцию, но не работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void search()
{
 int j,k;
 school p;
 for(j=0; j<N; j++)
  {
   for(k=0; k<N; k++)
    {
     if(strcmp(x[j].n,x[k].n)<0)
      {
       p=x[j];
       x[j]=x[k];
       x[k]=p;
      }
    }
  }
cout<<"\nPIB:"<<x.pib<<"\nKlass: "<<x.n;
fclose(f);
getch();
 
}
Добавлено через 38 минут
Я просто не могу понять, как и где мне лучше создать сам массив, что бы потом его сортировать.
Делать:
C++
1
2
3
4
struct school
{char pib[60];
char n[3];
}x[100]
Думаю нет смысла, это же тогда придется переписывать остальные функции и заменять цикл while на for ? И тогда нам нужно знать количество учеников.
wildfires
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 114
22.04.2012, 11:22  [ТС]     Сортировка значений типа char #4
Апну тему, может кто-то поможет, как отсортировать данные в файле.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
22.04.2012, 11:32     Сортировка значений типа char #5
ну как бы не работает, потому что это не алгоритм сортировки.
то что ты делаешь - попарно обмениваешь все элементы, причём не зависимо от их размеров строки и порядка следования.
А строки сравниваешь и перестановки делаешь вроде нормально.
напиши пузырьком сортировку.
wildfires
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 114
22.04.2012, 12:32  [ТС]     Сортировка значений типа char #6
Kuzia domovenok, спасибо, это понятно, но мне не нужно переделывать все программу, мне нужно оставить так и сделать, как-то сортировку, выдергивая данные из созданного файла. Можно конечно описать структуру как массив и потом переделать все функции, while цикл на for и свобондо сделать сортировку, но мне это не подойдет.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
22.04.2012, 12:45     Сортировка значений типа char #7
Что тебя не устраивает???
Сортируй массив структур пузырьком.
Это нечто вроде
C++
1
2
3
4
5
6
7
8
9
10
11
12
for(j=0; j<N; j++)
  {
   for(k=0; k<N-j-1; k++)
    {
     if(strcmp(x[k].n,x[k+1].n)<0)
      {
       p=x[j];
       x[j]=x[k];
       x[k]=p;
      }
    }
  }
К сожалению, нет времени на что-то более оптимизированное
Ты читал мой пост выше, или думаешь, что сортировать можно только линейные массивы чисел?
У тебя в программе ВООБЩЕ НИ ОДНОЙ попытки сортировки не было.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 12:50     Сортировка значений типа char
Еще ссылки по теме:

Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" C++
Сортировка чисел типа char с сохранением привязанного к этой цифре слова. VS2013 C++
C++ Ошибка "аргумент типа char несовместим с параметром типа char*"

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

Или воспользуйтесь поиском по форуму:
wildfires
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 114
22.04.2012, 12:50  [ТС]     Сортировка значений типа char #8
Kuzia domovenok, та я уже откинул свой вариант, который выкладывал в 3 сообщение и выложил в первом посте программу которую я уже написал и в которой мне нужно дописать функцию, которая будет сортировать данные выдергивая их с файла.
Yandex
Объявления
22.04.2012, 12:50     Сортировка значений типа char
Ответ Создать тему
Опции темы

Текущее время: 11:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru