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

Сортировка структуры по полю - C++

Войти
Регистрация
Восстановить пароль
 
Supernatural
285 / 141 / 28
Регистрация: 22.11.2010
Сообщений: 1,452
26.11.2013, 14:17     Сортировка структуры по полю #1
Есть структура типа СТУДЕНТ с полями:
*фио
*группа
*массив из пяти чисел (оценки)
Необходимо отсортировать структуру по возрастанию поля группа, выбрал самый простой метод клубок. В самом начале кода вылетает ошибка L-Value required.

C++
1
t1 = data[i].fio;
t1 и поле fio имеют тип 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
#pragma hdrstop
#pragma argsused
#include <iostream.h>
 
void main()
{
struct student
{char fio[10];
int group;
int ocenki[5];
};
student data[5];
int i,j,t2,t3,t4,t5,t6,t7;
char t1;
//---------------------------------------------
for (i = 0; i < 5; i++) {   //vvod dannyh structury
cin>>data[i].fio;
cin>>data[i].group;
for (j = 0; j < 5; j++) {
cout<<"Ocenka #"<<j+1;cin>>data[i].ocenki[j];
}
}
//---------------------------------------------
//sortirovka dannyh po polu ocenok
/*for (i=0;i<5; i++)
if (data[i].group<data[i+1].group)
{
t1 = data[i].fio;
t2=data[i].group;
   for (j=0;j<5;j++) {
   t3=data[i].ocenki[j];
   t4=data[i].ocenki[j+1];
   t5=data[i].ocenki[j+2];
   t6=data[i].ocenki[j+3];
   t7=data[i].ocenki[j+4];}
   //------------------------
   data[i].fio=data[i+1].fio;
   data[i].group=data[i+1].group;
   for (j=0;j<5;j++) {
   data[i].ocenki[j]=data[i+1].ocenki[j];
   data[i].ocenki[j+1]=data[i+1].ocenki[j+1];
   data[i].ocenki[j+2]=data[i+1].ocenki[j+2];
   data[i].ocenki[j+3]=data[i+1].ocenki[j+3];
   data[i].ocenki[j+4];data[i+1].ocenki[j+4];}
 
 
} */
//---------------------------------------------
for (i = 0; i < 5; i++)  //prostoi vyvod dannyh structury
{
cout<<data[i].fio<<" "<<data[i].group<<" ";
for (j=0;j<5;j++)
{
cout<<data[i].ocenki[j]<<" ";
}
cout<<"\n";
}
//---------------------------------------------
cin>>" ";
}
Вопрос- в чем моя ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 14:17     Сортировка структуры по полю
Посмотрите здесь:

Поиск по любому полю структуры C++
Сортировка по структуры по полю ФИО C++
C++ Сортировка по полю структуры
C++ Удаление структуры по определенному полю.
Запись и чтение структуры из файлов, сортировка по полю C++
Написать функцию сортировки по заданному полю для структуры User C++
Сортировка посредством пирамиды структуры "Отдел" по заданному полю C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.11.2013, 14:35     Сортировка структуры по полю #2
Supernatural,
C++
t1 = data [ i ]. fio ;
левая часть (lvalue) - символ.
правая часть (rvalue) - строка символов.
Вам надо изменить левую часть на указатель на строку.
Supernatural
285 / 141 / 28
Регистрация: 22.11.2010
Сообщений: 1,452
26.11.2013, 16:29  [ТС]     Сортировка структуры по полю #3
есть такое, поменял тип char на string и вроде решилась проблема. Не сразу догадался

Добавлено через 1 час 0 минут
data[i].fio=data[i+1].fio; здесь такая же история, в чем не правда?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.11.2013, 17:33     Сортировка структуры по полю #4
Supernatural, делайте вот так:
C++
#include <iostream>
#include <string.h>
using namespace std;
 
struct student
{
    char fio[32];
};
 
int main()
{
    char t1[32];
 
    student data[5];
    
    cin >> data[0].fio;
    cin >> data[1].fio;
    
    cout << "было:" << endl;
    cout << data[0].fio << " " << data[1].fio << endl;
        
    // поменяем местами
    strcpy(t1, data[0].fio);          // из дата[0].фио в т1
    strcpy(data[0].fio, data[1].fio); // из дата[1].фио в дата[0].фио
    strcpy(data[1].fio, t1);          // из т1 в дата[1].фио
    
    cout << endl;
            
    cout << "стало:" << endl;
    cout << data[0].fio << " " << data[1].fio << endl;
}
Добавлено через 4 минуты
Если вам нужны стринги, то вот так:
C++
#include <iostream>
#include <string> // string и string.h - разные вещи, не путайте.
using namespace std;
 
struct student
{
    string fio;
};
 
int main()
{
    string t1;
 
    student data[5];
    
    cin >> data[0].fio;
    cin >> data[1].fio;
    
    cout << "было:" << endl;
    cout << data[0].fio << " " << data[1].fio << endl;
        
    // поменяем местами
    t1 = data[0].fio;          // из дата[0].фио в т1
    data[0].fio = data[1].fio; // из дата[1].фио в дата[0].фио
    data[1].fio = t1;          // из т1 в дата[1].фио
    
    cout << endl;
            
    cout << "стало:" << endl;
    cout << data[0].fio << " " << data[1].fio << endl;
}
Добавлено через 1 минуту
При присваивании (=) типы левого и правого операнда должны быть одинаковыми.
Supernatural
285 / 141 / 28
Регистрация: 22.11.2010
Сообщений: 1,452
26.11.2013, 17:38  [ТС]     Сортировка структуры по полю #5
да в том и дело, что поле фио везде одинаковые, однако компилятор со мной все равно не соглашается
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.11.2013, 18:10     Сортировка структуры по полю #6
Цитата Сообщение от Supernatural Посмотреть сообщение
да в том и дело, что поле фио везде одинаковые, однако компилятор со мной все равно не соглашается
что говорит?

Добавлено через 2 минуты
Только сейчас прочитала задание:
Необходимо отсортировать структуру по возрастанию поля группа
Cпрашивается, а при чем здесь fio ???

Добавлено через 17 минут
Supernatural, вот вам полная программа. За вами плитка шоколада.
C++
#include <iostream>
#include <string>
using namespace std;
 
struct student
{
    string fio;
    int group;
    int ocenka;
};
 
int main()
{
    student data[5];
    
    for(int i = 0; i < 5; i++)
    {
        cout << "Введите фио студента:";
        cin >> data[i].fio;
        cout << "Введите номер группы:";
        cin >> data[i].group;
        cout << "Введите оценку:";
        cin >> data[i].ocenka;
    }
    
    student tmp;
 
    for(int i = 0; i < 5 - 1; i++)
    {
        for(int j = i + 1; j < 5; j++)
        {
            if (data[i].group > data[j].group)
            {
                tmp = data[i];
                data[i] = data[j];
                data[j] = tmp;
            }
        }
    }
    
    for(int i = 0; i < 5; i++)
    {
        cout << i << ") студент " << data[i].fio << " состоит в группе " << data[i].group << endl;
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2013, 20:46     Сортировка структуры по полю
Еще ссылки по теме:

C++ Поиск в массиве объектов типа Student по заданному полю (массивы, структуры)
C++ Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры)
C++ Отсортировать структуры по полю union
C++ Реализовать поиск по заданному полю в массиве пользовательского типа (структуры)
C++ Сортировка по заданному полю структуры

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

Или воспользуйтесь поиском по форуму:
Supernatural
285 / 141 / 28
Регистрация: 22.11.2010
Сообщений: 1,452
26.11.2013, 20:46  [ТС]     Сортировка структуры по полю #7
не совсем так как представлял
p.s. кнопки спасибо конечно мало
Yandex
Объявления
26.11.2013, 20:46     Сортировка структуры по полю
Ответ Создать тему
Опции темы

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