0 / 0 / 0
Регистрация: 17.01.2018
Сообщений: 6

Сортировка и группировка строк

19.01.2018, 10:26. Показов 2974. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Необходимо сделать сортировку строк из текстового файла со следующим содержанием:

511^Bahn^Stollberg^Hauptbahnhof^58
5^Bahn^Hutholz^Gablenz^56
4^Bahn^Hutholz^Hauptbahnhof^57
511^Bahn^Hauptbahnhof^Stollberg^55
5^Bahn^Gablenz^Hutholz^33
4^Bahn^Hauptbahnhof^Hutholz^54

по следующему принципу:

...
Gablenz:
5 (Bahn) Hutholz
Hauptbahnhof:
4 (Bahn) Hutholz
511 (Bahn) Stollberg
Hutholz:
4 (Bahn) Hauptbahnhof
5 (Bahn) Gablenz
Stollberg:
511 (Bahn) Hauptbahnhof
...

Получается такой вариант:

...
Gablenz:
5 (Bahn) Hutholz
Hauptbahnhof:
4 (Bahn) Hutholz
Hauptbahnhof:
511 (Bahn) Stollberg
Hutholz:
4 (Bahn) Hauptbahnhof
Hutholz:
5 (Bahn) Gablenz
Stollberg:
511 (Bahn) Hauptbahnhof
...

Код:

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
#ifndef LINIEN_H
#define LINIEN_H
#include <string>
using namespace std;
 
class Linien
{
private:
    string myLinienummer;
    string myLinietyp;
    string myLiniestart;
    string myLinieziel;
    string myLiniezeit;
public:
    Linien();
    Linien(const string& linienummer, const string& linietyp, const string& liniestart, const string& linieziel, const string& liniezeit);
    string linienummer() const { return myLinienummer; }
    string linietyp() const { return myLinietyp; }
    string liniestart() const { return myLiniestart; }
    string linieziel() const { return myLinieziel; }
    string liniezeit() const { return myLiniezeit; }
    string serialize() const;
};
 
Linien createLinienFromString(string s);
ostream& operator<<(ostream& os, const Linien& linien);
bool operator<(const Linien& linien1, const Linien& linien2);
 
void liniensort(Linien linien[], int len);
#endif // LINIEN_H
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
#include <linien.h>
#include <sstream>
#include <tokenizer.h>
#include <iostream>
 
using namespace std;
 
Linien::Linien() :
  myLinienummer(""), myLinietyp(""), myLiniestart(""), myLinieziel(""), myLiniezeit("")
{}
 
Linien::Linien(const string& linienummer, const string& linietyp, const string& liniestart, const string& linieziel, const string& liniezeit):
  myLinienummer(linienummer), myLinietyp(linietyp), myLiniestart(liniestart), myLinieziel(linieziel), myLiniezeit(liniezeit)
{}
 
ostream& operator<<(ostream& os, const Linien& linien) {
    os<<linien.liniestart()<<":"<<endl;
    os<<"  "<<linien.linienummer()<<" ("<<linien.linietyp()<<") "<<linien.linieziel();
    return os;
 
}
 
string Linien::serialize() const {
  ostringstream out;
  out<<myLinienummer<<"^"<<myLinietyp<<"^"<<myLiniestart<<"^"<<myLinieziel<<"^"<<myLiniezeit;
  return out.str();
}
 
Linien createLinienFromString(string s) {
  Tokenizer tok(s, '^');
  string linienummer = tok.next();
  istringstream slinietyp(tok.next());
  string linietyp;
  slinietyp>>linietyp;
  istringstream sliniestart(tok.next());
  string liniestart;
  sliniestart>>liniestart;
  istringstream slinieziel(tok.next());
  string linieziel;
  slinieziel>>linieziel;
  istringstream sliniezeit(tok.next());
  string liniezeit;
  sliniezeit>>liniezeit;
  return Linien(linienummer, linietyp, liniestart, linieziel, liniezeit);
}
 
bool operator<(const Linien& linien1, const Linien& linien2) {
    if(linien1.liniestart() != linien2.liniestart())
    return linien1.liniestart() < linien2.liniestart();
    return linien1.linienummer() < linien2.linienummer();
}
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
#include "linien.h"
 
static void swapLinien(Linien& linien1, Linien& linien2) {
  Linien help;
 
  help = linien1;
  linien1 = linien2;
  linien2 = help;
}
 
void liniensort(Linien linien[], int len) {
  int i, k;
  int iMin;
 
  for (i = 0; i < len-1; i++) {
    iMin = i;
    for (k = i+1; k < len; k++) {
      if (linien[k] < linien[iMin]) {
        iMin = k;
      }
    }
    if (iMin != i) {
      swapLinien(linien[i], linien[iMin]);
    }
  }
}
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
#include <iostream>
#include <fstream>
#include <tokenizer.h>
#include <linien.h>
using namespace std;
 
const int MAXSIZE = 1000;
 
int readFile(Linien linien[], const string& fileName) {
  ifstream fi(fileName.c_str());
  if (!fi) {
    cout<<"Datei "<<fileName<<" nicht gefunden";
    return 0;
  }
  string line;
  int size = 0;
  while (getline(fi, line)) {
    if (line.size() == 0) {
      continue;
    }
    linien[size] = createLinienFromString(line);
    size++;
  }
  return size;
}
 
void listeanzeigen () {
    string zeile;
    string teil;
    ifstream linieliste("linieliste.dat");
    while (getline(linieliste, zeile)) {
        if (zeile[0]=='#') continue;
        Tokenizer tok(zeile, '^');
        while (tok.hasMore()) {
            teil = tok.next();
            cout<<teil<<" ";
        }
        cout<<endl;
    }
}
 
void showLinien(Linien linien[], int len) {
  int i;
  cout<<"---"<<endl;
  for (i = 0; i < len; i++) {
    cout<<linien[i]<<endl;
  }
  cout<<"---"<<endl;
}
 
int main() {
    Linien linien[MAXSIZE];
    int len = readFile(linien, "linieliste.dat");
    listeanzeigen();
    liniensort(linien, len);
    showLinien(linien, len);
    return 0;
}
Помогите советом, где недоработка.

Заранее благодарю!

Добавлено через 1 минуту
Проблема еще актуальна и состоит в том, чтобы сперва сделать сортировку по общему во всех строках слову, а после по этому же слову сделать группировку строк.

Верно ли я понимаю алгоритм и как можно его перенести в код?

Добавлено через 23 часа 6 минут
Проблема по-прежнему актуальна
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2018, 10:26
Ответы с готовыми решениями:

Сортировка и группировка
Есть гипотетическая задача: Несколько пользователей отвечают на тест из 9-ти вопросов. (Предположительно у каждого ответа есть свой...

Сортировка(группировка)
Нужно в запросе сделать группировку(сортировку) по числу в месяце с 01 по 15 число при этом месяц и год могут быть любыми, с SQL не...

Сортировка и группировка
Добрый день. Код привожу с сокращениями. Делаю запрос: SELECT operitems.ORD ord, job.DATE job_date, job.ID job_id FROM okb_db_operitems...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.01.2018, 10:26
Помогаю со студенческими работами здесь

Сортировка и группировка коллекции
Можно ли в public int CompareTo(Transport obj) { if (this.Consumption &gt; obj.Consumption) ...

Сортировка и группировка е-майлов
Народ помогите, пожалуйста!!! Всю жизнь работал с Оутлуком, он не без косяков конечно, но интерфейс юзабельней чем в Лотусе. ...

Группировка строк
Добрый день! Помогите с макросом,который бы группировал строки...групп должно быть несколько,в столбце А есть например ячейки с именем...

Access подстановка, группировка, сортировка
Помогите сделать. Пропустил тему. Не могу сделать лабораторку. Ход выполнения работы 1.Схема данных Описать какие связи...

Сортировка (группировка) файлов по типу
Здравствуйте ребята! у меня такая задача надо сортировать (группировать) файлы по их типу т.е. документы word: *.doc, и т.д.. ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru