Mam taki kod:
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
string nazwaPliku;
cout << "Podaj nazwe pliku do otwarcia: ";
cin >> nazwaPliku;
ifstream plikwe(nazwaPliku.c_str());
if(!plikwe)
{
cerr << "Blad otwarcia pliku\n";
return -1;
}
string tmp;
vector<string> tekst;
while(plikwe >> tmp)
{
tekst.push_back(tmp);
}
cout << "Przed usunieciem duplikatow\n";
for(int i = 0; i < tekst.size(); ++i)
{
cout << tekst[i] << "\n";
}
// najpierw sortujemy slowa, bo algorytm unique "usuwa" tylko
// slowa lezace obok siebie
// sort(tekst.begin(),tekst.end());
for (int i = 0; i < tekst.size(); i++)
for (int j = i+1; j < tekst.size(); j++)
if (tekst[i] > tekst[j]) swap(tekst[i], tekst[j]);
// algorytm unique przenosi duplikaty na koniec, i zwraca nowy logiczny
// koniec. Aby usunac calkowicie z kontenera duplikaty
// stosujemy metode erase.
tekst.erase(unique(tekst.begin(),tekst.end()),tekst.end());
cout << "Po usunieciu duplikatow\n";
for(int i = 0; i < tekst.size(); ++i)
{
cout << tekst[i] << "\n";
}
cout << "Podaj nazwe pliku do ktorego zapisac\n";
cin >> nazwaPliku;
ofstream plikwy(nazwaPliku.c_str());
for(int i = 0; i < tekst.size(); ++i)
{
plikwy << tekst[i] << "\n";
}
}
I ani przez zakomentowane sort ani przez bombelkowe nie sortuje mi liczb poprawnie. Przykładowo mam dane:
1
10
600
50
1000
Mają być one wyświetlone w ten sposób:
1
10
50
600
1000
Aha i jeszcze jedno w moim pliku z jakiegoś powodu znajdują się wartosci liczbowe ze średnikiem : np. 5055; i 5055 Jak zrobić by takie dublikaty też były usuwane ?
Tzn np:
5055;
5055
600
601;
ma wypisać w pliku:
600
601
5055
tak by nie duplikat ze średnikiem pozostał bez średnika zapisany a duplikat się usunął :)
Dzięki za pomoc.