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

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

Войти
Регистрация
Восстановить пароль
 
wildfires
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 114
#1

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

21.04.2012, 00:14. Просмотров 801. Ответов 7
Метки нет (Все метки)

Здравствуйте, есть у меня структура: ФИО ученика и класс в котором он учится.
Класс состоит из цифры и буквы. Как можно отсортировать данные по классам в порядке: 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();}
}
}
}
Вот моя программа, нужно добавить функцию, которая будет отсортировать учеников по классам как я написал выше.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2012, 00:14     Сортировка значений типа char
Посмотрите здесь:

Сортировка цифр в строке типа char - C++
Здравствуйте! Помогите, пожалуйста, дописать программу. Прогррамма должна сортировать буквы или цифры во введенной строке. Например...

Аргумент типа char (*)[1000] несовместим с параметром типа char** - C++
Здравствуйте! Есть вот такая структура: #define max 1000 struct expr { char s; int index; };

Добавление в массив типа char * одного элемента типа char - C++
Дан класс Строка, содержащий указатель на char - адрес динамически выделенной для размещения символов строки памяти и длину строки. Нужен...

Сортировка чисел типа char с сохранением привязанного к этой цифре слова. VS2013 - C++
Это одна из функций программы которая читает с .txt файла строки, в одной строке название команды в другой количество набранных очков....

Сколько значений переменных типа char можно записать в динамической памяти на место одной удаленной переменной - C++
3 задача с++ Сколько значений переменных типа char можно записать в динамической памяти на место одной удаленной переменной типа int?...

Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" - C++
int f(unsigned char s, unsigned char q) { N = strlen(s); //Ошибка тут... M = strlen(q); //...и тут Как исправить?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Black-millenium
24 / 24 / 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
Еще ссылки по теме:

В чем отличие двумерного массива типа char от массива указателей на char? - C++
В чем отличие двумерного массива типа char и массива указателей на char ?

Error: значение типа "const char" нельзя присвоить сущности типа "double" - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt;// using namespace std; void main(void) { const int k=5; int a=10; unsigned int...

размерность типа Char - C++
подскажите плиз как сделать переменную типа Char очень большой размерности!!!

Переменная типа char - C++
Учусь программированию на C++. Вот, столкнулся с проблемой. Пытался найти ответ в интернете, но об этом нигде не сказано. Дело в том, что я...


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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

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