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

Создание списка структур из структур исходного списка - C++

Восстановить пароль Регистрация
 
Bramme
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 60
02.06.2013, 17:27     Создание списка структур из структур исходного списка #1
Добрый день. В следующей программе, в функции nowaq не получается создать список из структур исходного списка(делаю по аналогии с функцией queue):
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
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <iostream>
 
#define Lmax 20
#define CLR while(fgetc(f)!='\n')
 
using namespace std;
 
struct ANK {char fam[Lmax], name[Lmax], otch[Lmax], pol[Lmax], date_of_birth[Lmax];};
struct ADD {char gosvo[Lmax], obl[Lmax], gor[Lmax], tel[Lmax];};
struct student {char fak[Lmax], group[Lmax]; ANK ank; ADD add; student *next,*last;};
 
student* queue(char name[]){
   student *tek,*queue=NULL,*posl;
   FILE *f;
   if (!(f=fopen(name,"r"))) puts("File not found");
   else
      {
       tek=(student*)malloc(sizeof(student));
       queue=tek;
      while(!feof(f)) {
            if(fgets(tek->fak,Lmax,f)) {
            tek->fak[strlen(tek->fak)-1]='\0';
            fgets(tek->group,Lmax,f);
            tek->group[strlen(tek->group)-1]='\0';
            fgets(tek->ank.fam,Lmax,f);
            tek->ank.fam[strlen(tek->ank.fam)-1]='\0';
            fgets(tek->ank.name,Lmax,f);
            tek->ank.name[strlen(tek->ank.name)-1]='\0';
            fgets(tek->ank.otch,Lmax,f);
            tek->ank.otch[strlen(tek->ank.otch)-1]='\0';
            fgets(tek->ank.pol,Lmax,f);
            tek->ank.pol[strlen(tek->ank.pol)-1]='\0';
            fgets(tek->ank.date_of_birth,Lmax,f);
            tek->ank.date_of_birth[strlen(tek->ank.date_of_birth)-1]='\0';
            fgets(tek->add.gosvo,Lmax,f);
            tek->add.gosvo[strlen(tek->add.gosvo)-1]='\0';
            fgets(tek->add.obl,Lmax,f);
            tek->add.obl[strlen(tek->add.obl)-1]='\0';
            fgets(tek->add.gor,Lmax,f);
            tek->add.gor[strlen(tek->add.gor)-1]='\0';
            fgets(tek->add.tel,Lmax,f);
            tek->add.tel[strlen(tek->add.tel)-1]='\0';
            posl=tek;
            tek=(student*)malloc(sizeof(student));
            tek->last=posl;
            posl->next=tek;
         }
      }
      posl->next=NULL;
      free(tek);
      }
   return(queue);
   }
 
student* nowaq(student *queue, char faks[][Lmax], int i){
    student *tek, *tek2, *queue2, *posl;
    tek=queue;
    tek2=(student*)malloc(sizeof(student));
    queue2=tek2;
    while(tek){
        if(strstr(tek->fak,faks[i])!=NULL){
            tek2=tek;
            posl=tek2;
            tek2=(student*)malloc(sizeof(student));
            posl->next=tek2;
        }
        tek=tek->next;
    }
    posl->next=NULL;
    free(tek2);
    printf("%s\n", queue2->group);
}
 
student* poiskmax(student *queue){
    student *tek;
    char faks[5][Lmax]; int i, j, tmp, kolf, kols[5]={0}; bool flag;
    tek=queue;
    strcpy(faks[0],tek->fak);
    tek=tek->next;
    kolf=1;
    i=1;
    while(tek){
        flag=true;
        for(j=0;j<kolf&&flag==true;j++)
            if(strstr(tek->fak,faks[j])!=NULL) flag=false;
        if(flag) {strcpy(faks[i++],tek->fak); kolf++; tek=tek->next;} else tek=tek->next;}
 
    for(i=0;i<kolf;i++){
        tek=queue;
        while(tek)
            if(strstr(tek->fak,faks[i])!=NULL) {kols[i]++; tek=tek->next;} else tek=tek->next;}
 
    for(i=0;i<kolf-1;i++){
        for(j=0;j<kolf-1;j++){
            if (kols[j + 1] > kols[j]){
                tmp = kols[j + 1]; kols[j + 1]=kols[j]; kols[j]=tmp;}}}
 
    nowaq(queue, faks, 0);
}
 
int main() {
setlocale(LC_ALL,"RUS");
student *first;
char name1[Lmax];
printf("Input file name: ");
gets(name1);
first=queue(name1);
poiskmax(first);
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2013, 17:27     Создание списка структур из структур исходного списка
Посмотрите здесь:

C++ класс односвязного списка структур 0_о
C++ Можно ли поменять местами значения структур связного динамического списка целиком?
C++ Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур.
Списки структур. Указатель на узел другого списка внутри структуры C++
Массив структур, сохранение начала каждой из структур C++
C++ Использование динамических структур данных (вывести, сколько раз число совпадает с элементами списка)
C++ Написать код программы, выполняющей растяжку списка и вставку, удаление из списка и сжатие списка
C++ Блочная сортировка структур (Отсортировать массив структур по фамилии)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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