Witam. Mam za zadanie napisać program wczytujący plik oddzielanymi białymi znakami liczb i drukujący te liczby w porządku od najmniejszej do największej, po jednej w wierszu. Każda wartość ma być wydrukowana tylko raz. Jeśli jakaś wartość będzie się powtarzać, ma być wydrukowana obok niej, w tym samym wierszu informacja o liczbie powtórzeń.
Przykładowe dane:
7 5 5 7 3 117 5
Oczekiwana odpowiedź:
3
5 3
7 2
117
Dane zwracane przez program:
3
5
7 3
117 2
Głowię się nad tym zadaniem od jakiegoś czasu i nie wiem dlaczego 3 zwraca pod 7 a nie jak powinno być pod 5.
#include <algorithm>
#include <fstream>
#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;
int main() {
cout << "Podaj nazwę pliku wejściowego:\n";
string iname;
cin >> iname;
ifstream ifs {iname};
if (!ifs) throw runtime_error("Nie można otworzyć pliku wejściowego " + iname);
vector<int> numbers;
for (int num; ifs >> num; ) {
numbers.push_back(num);
}
sort(numbers.begin(), numbers.end());
int n = 1;
for (int i = 0; i < numbers.size(); ++i) {
if (i == 0 || numbers[i] != numbers[i - 1]) {
cout << numbers[i];
if (n > 1) cout << '\t' << n;
cout << '\n';
n = 1;
} else {
++n;
}
}
return 0;
}