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

Switch - bardzo dużo case'ów, przypisanie nr case'a do nr wiersza w pliku txt

Ostatnio zmodyfikowano 2016-12-07 16:40
Autor Wiadomość
cichy3993
Temat założony przez niniejszego użytkownika
Switch - bardzo dużo case'ów, przypisanie nr case'a do nr wiersza w pliku txt
» 2016-12-06 22:33:47
Cześć, tak jak w temacie.
Bawię się w robienie programu z "bazą danych" spisaną w pliku txt.
Stworzyłem stringową tablicę (łącznie z 1704 komórkami) i chcę każdej komórce przypisać zawartość odpowiadającemu jej wierszowi w "bazie", np. tablica[0], będzie miała zawartość 1. wiersza, tablica[10], będzie miała zawartość 9. wiersza itd.
Problem rodzi się w tym, że aby to poprzypisywać potrzebuję użyć Switcha i case'ować za każdym razem jak chcę linijkę przypisać komórce, a że linijek w "bazie" mam 1704,to musiałbym wypisywać 1704 case'y.
Pytanie brzmi: Czy da się ten zapis jakoś uprościć, tzn zamiast pisać
C/C++
switch( nr_linijki )
{
case 1: tablica[ x ] = linia;
case 2: tablica[ x ] = linia;
    ...
case 1704: tablica[ x ] = linia;
}
zaznaczyć w jakiś magiczny sposób zbiór case'ów, dla którego zostanie wykonana ta sama instrukcja, np jak w matematyce zaznaczaemy to (1, 1704) albo po prostu 1-1704.
Z góry dziękuję za odpowiedź!
P-154599
Monika90
» 2016-12-06 23:12:26
C/C++
const int rozmiar = 1704;
std::string tablica[ rozmiar ];

int i = 0;
while( i < rozmiar && std::getline( plik, tablica[ i ] ) )
{
    ++i;
}

std::cout << "wczytano " << i << " wierszy" << std::endl;


tablica[10], będzie miała zawartość 9. wiersza itd.
Raczej jedenastego.
P-154600
mokrowski
» 2016-12-07 13:17:47
C/C++
#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>

using namespace std;

constexpr static int rozmiar = 1704;
// Ok, niech będzie tablica. Choć jak wiadomo chyba lepiej vector...
string tablica[ rozmiar ];

// Dla kontroli wyświetlenie...
void pokaz_tablice()
{
    for( int i = 0; i < rozmiar; ++i )
         cout << tablica[ i ] << endl;
   
}

int main()
{
    ifstream plik( "/tmp/dane.txt" );
   
    if( !plik )
    {
        cerr << "Błąd otwarcia pliku" << endl;
        exit( 1 );
    }
   
    generate( begin( tablica ), end( tablica ),[ & plik ]() {
        string linia;
        getline( plik, linia );
        return linia;
    } );
   
    pokaz_tablice();
}
P-154610
carlosmay
» 2016-12-07 13:52:05
C/C++
constexpr static int rozmiar = 1704;
// Ok, niech będzie tablica. Choć jak wiadomo chyba lepiej vector...
string tablica[ rozmiar ];
Tak na poważnie globalnie?
P-154611
mokrowski
» 2016-12-07 16:40:59
No oczywiście że nie na poważnie globalnie :-) "Globale to samo zło" ale jako przykład niech ma i nie szuka :-)
Raczej chodziło o pokazanie że większość pętli i ew. przetwarzania danych jest już w algorytmach i warto z nich korzystać.
P-154621
« 1 »
  Strona 1 z 1