Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zmienne dynamiczne w odczycie z pliku

Ostatnio zmodyfikowano 2017-05-21 21:32
Autor Wiadomość
mikewazowski
Temat założony przez niniejszego użytkownika
» 2017-05-21 10:04:02
Odpowiadając na twoje pytanie - program ma tworzyc macierz sąsiedztwa na bazie odczytanaj z pliku listy incydencji gdzie V to wierzcholek startowy a E to wierzcholek incydentny. Nie miałabym problemu gdyby w każdej linii była równa ilość E, ale tak nie jest
P-161366
karambaHZP
» 2017-05-21 12:09:04
P-161370
mokrowski
» 2017-05-21 12:10:23
1. Linię wczytaj do string'a z pomocą getline(...).
2. Zasil tym stringiem stringstream.
3. Rozdziel dane wczytane do vectora stringów.
4. Parsuj jak dusza zapragnie :-)

Teraz "wynajdujesz koło na nowo"... ni chyba że "kazali/chcesz" :-)

C/C++
#include <iostream>
#include <stdexcept>
#include <iterator>
#include <algorithm>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>

std::ifstream openFile( const std::string & fileName ) {
    std::ifstream file( fileName );
   
    if( !file ) {
        throw std::logic_error( "Błąd otwarcia pliku" );
    }
    return file;
}

std::vector < std::vector < std::string >> readLines( std::ifstream & openFile ) {
   
    using input_s = std::istream_iterator < std::string >;
   
    std::string line;
    std::stringstream ss;
    std::vector < std::vector < std::string >> data;
   
    while( getline( openFile, line ) ) {
        ss.str( line );
        std::vector < std::string > vecLine;
        copy( input_s( ss ), input_s(), std::back_inserter( vecLine ) );
        data.push_back( vecLine );
        ss.clear();
    }
    return data;
}

int main() {
    auto file = openFile( "dane.txt" );
    auto data = readLines( file );
   
    for( const auto & row: data ) {
        std::cout << "wiersz: >";
        for( const auto & field: row ) {
            std::cout << field << ' ';
        }
        std::cout << '\n';
    }
}
P-161371
Chowan
» 2017-05-21 18:26:56
a na podstawie tego co było podane na początku może być coś takiego?? (pętla for do sprawdzenia co wczytało się na małym pliku) tylko jak jest na końcu linii spacja to łączy ją z nastepną nie wiem jak tego uniknąć.

C/C++
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 1000
int main()
{
    // ------------------- tablica wypelniona zerami ---
    int ** mac_sas = new int *[ MAX ];
    for( int i = 0; i < MAX; i++ )
    {
        mac_sas[ i ] = new int[ MAX ];
    }
    for( int i = 0; i < MAX; i++ )
    {
        for( int j = 0; j < MAX; j++ )
        {
            mac_sas[ i ][ j ] = 0;
        }
    }
    fstream plik;
    plik.open( "dane.txt.txt" );
    int V, E;
    char dwukropek;
    if( plik.is_open() ) {
        cout << "Plik otwarty poprawnie\n";
        while( plik.good() ) {
            plik >> V; plik >> dwukropek;
            while(( plik.get() != '\n' ) && !plik.eof() )
            {
                plik >> E;
                mac_sas[ V - 1 ][ E - 1 ] = 1;
            }
        }
    }
    else if( plik.eof() ) std::cout << "Koniec pliku";
    else if( plik.fail() ) std::cout << "Blad wczytania pliku";
   
    for( int i = 0; i < 3; i++ ) {
        for( int j = 0; j < 30; j++ ) {
            std::cout << mac_sas[ i ][ j ];
        }
        std::cout << std::endl;
    }
    return 0;
}
P-161389
mikewazowski
Temat założony przez niniejszego użytkownika
» 2017-05-21 21:32:01
@Chowan - troche zmodyfikowałam ale działa idealnie jak chciałam, właśnie o takie łatwe rozwiązanie mi chodziło, dziękuje, zamykam
P-161396
1 « 2 »
Poprzednia strona Strona 2 z 2