Wczytywanie z pliku txt i konwersja tekstu na int

0

Witam. Mam plik txt o strukturze:

4 5
1 2
2 3
1 3
3 4
1 4

I mam polecenie wczytanie tego tekstu jako zmiennych typu int. Chodzi mi tylko o algorytm.. wymyśliłem cos takiego:

1.Wczytuje znaki do tablicy charów az nie napotkam znaku spacji lub nowej lini.
2.Zamieniam 1 element tablicy charó na int poprzez zależności ASCII czyli np. cyfra 1 w ascii to 49, cyfra 2 w asii to 50 i jezeli wczytalem tylko 2 znaki przed napotkaniem nowej lini lub spacji wykonuje polecenie

int liczba=10*z_ascii_na_int(ch[0])+z_ascii_na_int(ch[1]);

gdzie funkcja z_ascii_na_int() zmienia znak ascii na odpowiednia wartosc int. dla 3 cyfrowej liczby wygladalo by to tak:

int liczba=100*z_ascii_na_int(ch[0])+10*z_ascii_na_int(ch[1])+z_ascii_na_char(ch[2]);
3.Wracam do kroku 1 jeżeli nie uzyskałem końca pliku.

I teraz moje pytanie: Czy istnieje jakiś szybszy sposów? W szczególności zależy mi na szybkości! z góry dziękuje na pomoc:)
0

może przy wczytywaniu użyj fscanf(plik,"%d",&liczba);
lub bardziej cplasplasowo:
strumien >> liczba;

btw w c++:
int liczba = 0;
dla_kazdego_znaku_czytajac_od_lewej:
liczba*=10;
liczba+=znak='0';

albo funkcja atoi

0

A jaki język? Bo w .NET jest np. Convert.ToInt32(string) i nie trzeba iterować po cyfrach, jak przypuszczam zapewne w Javie, python'ie etc też są podobne funkcje :)

0

Język jaki?

c++
http://ideone.com/iIMjO

W C robisz podobnie.
Otwierasz plik i później za pomocą fscanf czytasz liczby. fscanf(plik, "%d %d", &li1, &li2) - zerknij do dokumentacji

0

Jeżeli język to C#

List<int> list = new List<int>();
string line;
while ( (line= reader.ReadLine()) != null)
{
   list.AddRange(line.Split(new char[] { ' ', '\t' },StringSplitOptions.RemoveEmptyEntries).Select(p => int.Parse(p)));
}

to chyba prościej się nie da ;]

EDIT: tag dodany po moim poście ;)

0

spróbowałbym tak:

    int i=0;
    int temp;
    std::vector <int> liczba;
    ifstream plik;
    plik.open("pliczek.txt");
    if(plik.good())
    {
        while(!plik.eof())
        {
            plik >> temp;
            liczba.push_back(temp);
            i++;
        }
    }

 

tylko musiałbyś pamiętać, że ostatni element w tablicy jest powtórzeniem przedostatniego co jednak da się łatwo wyeliminować :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1