#include <stdio.h>
#include <string.h>
#include <locale.h>
#define AR_LEN 100
struct Route {
char number[50];
char station[50];
int trips;
};
int main(void) {
setlocale(LC_ALL, "rus");
struct Route ar[AR_LEN];
FILE *f_in = fopen("in.txt", "r");
struct Route route = {};
int count = 0;
int i;
int cnt;
while (
count < AR_LEN &&
3 == fscanf(f_in, "%s %s %d", route.number, route.station, &cnt)) {
int num_idx = -1;
for (i = 0; i < count; ++i) {
if (strcmp(route.station, ar[i].station) == 0) {
num_idx = i;
break;
}
}
if (num_idx == -1) {
num_idx = count;
route.trips = cnt;
++count;
}
else {
route.trips = ar[num_idx].trips += cnt;
}
ar[num_idx] = route;
}
fclose(f_in);
for (i = 0; i < count; ++i) {
printf("%s %s %d\n",
ar[i].number,
ar[i].station,
ar[i].trips);
}
return 0;
}
#ifndef FUNC_H
#define FUNC_H
struct Route {
char station[50];
int trips;
};
int lt(struct Route a, struct Route b);
// возвращает true, если a < b лексикографически
void swap(struct Route *pa, struct Route *pb);
// обмен значений двух маршрутов
void ar_sort(struct Route ar[], int n);
// сортировка массива маршрутов (пока - выбором)
void ar_print(struct Route ar[], int n);
// печать массива маршрутов
#endif
#include <stdio.h>
#include <string.h>
#include "func.h"
int lt(struct Route a, struct Route b) {
return strcmp(a.station, b.station) < 0;
}
void swap(struct Route *pa, struct Route *pb) {
// обмен значений двух маршрутов
struct Route temp = *pa;
*pa = *pb;
*pb = temp;
}
void ar_sort(struct Route ar[], int n) {
// сортировка массива маршрутов (пока - выбором)
int i;
for (i = 0; i < n-1; ++i) {
int imin = i;
int j;
for (j = i+1; j < n; ++j) {
if (lt(ar[j], ar[imin])) {
imin = j;
}
}
if (i != imin) {
swap(&ar[i], &ar[imin]);
}
}
}
void ar_print(struct Route ar[], int n) {
// печать массива маршрутов
int i;
for (i = 0; i < n; ++i) {
printf("%s: %d\n", ar[i].station, ar[i].trips);
}
}
23А M 37
157МН2 Y 70
23А M 42