[c++]sortowanie danych pobranych z pliku

Próbuje n

To jest zrobione dla dwóch studentów , numer indeksu składa się z 6 cyfr i nie wiem jak to porównać i wypisać linie

Co to wg Ciebie ma robić?

int k[6];

...

name.find(k[6]);

Deklarujesz tablicę liczb całkowitych, a następnie do metody std::string::find przesyłasz wartość spoza tej tablicy (6-elementowa indeksowana jest wartościami 0…5). Bezsens, który sprawia wrażenie, że nie znasz zupełnie C++. O ile można to nie ma sensu się bawić w samodzielne rozdzielanie wartości, skoro może to zrobić biblioteka. Wczytywałbym raczej w formie

plik >> string >> string >> int;

W ten sposób możesz uzyskać poszczególne wartości w osobnych zmiennych.

PS Jeśli w przyszłości będziesz zamieszczał swój kod na forum, zadbaj o jego formatowanie inne niż losowe, to naprawdę utrudnia pisanie i znajdowanie błędów.

ok, dzięki, sory ale jestem początkujący,

czyli zrobić bez pętli for i żeby było w jednej lini mogę coś takiego?

plik>>string>>string>>int;

....................

cout<

Jeśli chcesz te dane sortować to i tak siłą rzeczy musisz jest w pętli wszystkie pobrać, a następnie w drugiej pętli wypisać.

i jeszcze jedno pytanie dlaczego przy deklarowaniu tablicy stringów wyskakuje mi błąd programu

string name[1],s[1];

int k[1];

while (!plik.eof()){

      for(int i=0;i<2;++i){   

                  plik>>name[i]>>s[i]>>k[i];

                  cout<
}}

Bo takim zapisem tworzysz dwie jednoelementowe tablice ;], a chcesz pobrać dwa elementy :stuck_out_tongue:

Czy przypadkiem to s[] nie służy ci do przechowywania odstępu ?

proszę o sprawdzenie

#include 

#include 

#include 

#include 

using namespace std;


int main(int argc, char *argv[])

{

    ifstream plik ("imiona.txt");

    string name[2],s[2];

     int k[2];

     while (!plik.eof()){

      for(int i=0;i<2;++i){      

            plik>>name[i]>>s[i]>>k[i];

      }

       for(int i=0;i<2;){

             if(k[i]>k[++i]){

              cout<
           }

}

    system("PAUSE");

    return EXIT_SUCCESS;

}

chyba coś jest nie tak z wypisywaniem

No na pewno coś jest nie tak. Nie mam pojęcia co chciałeś osiągnąć, ale na pewno nie działa to dobrze.

Ogólnie kod mógłby wyglądać tak (zwróć uwagę na formatowanie kodu - czytelność), jeśli w pliku są tylko 2 wiersze

#include 

#include 

#include 

using namespace std;


int main(int argc, char *argv[])

{

    ifstream plik ("imiona.txt");

    string name[2], s[2];

    int k[2];


	while (!plik.eof())

	{

		for(int i = 0; i < 2; ++i)

		{     

			plik >> name[i] >> s[i] >> k[i];

		}

	}



	int a = 0, b = 1;


	if(k[0] > k[1])

	{

		a = 1;

		b = 0;

	}


	cout << name[a] << s[a] << k[a] << endl;

	cout << name[b] << s[b] << k[b] << endl;


	return 0;

}

W przypadku ogólnym

→ wczytujesz dane

→ sortujesz

→ wypisujesz

Sensowne jest storzenie struktury Student z polami imię, nazwisko, numer indeksu i napisani operatora porównującego po indeksie - wtedy można by użyć standardowych funkcji sortowania.

Może przy wypisywaniu warto dodać spacje/tabulacje lub setw() rozdzielające imie, nazwisko i indeks.

ja chciałem uniwersalnie to zrobić, tak żeby nie podawać indeksu , tylko żeby automatycznie porównało i wyświetliło w odpowiednim porządku.

Dodane 01.05.2011 (N) 14:47

a jak zrobić żeby nie wpisywać k[0] itp. tylko w pętli for porównywało?? Bo jak bym miał z 10 numerów, to nie będę ręcznie porównywac

Użyj sort() z lub napisz sam jakieś sortowanie.

jakie parametry pobiera ta funkcja??

sort: http://www.cplusplus.com/reference/algorithm/sort/