Avatar billede nicklasw Nybegynder
10. februar 2009 - 22:57 Der er 12 kommentarer og
2 løsninger

udfyldning af 2 dimensionel char array

Hej alle eksperter.
Jeg har en tekst fil som nærmest tegner et kort angivet i x,y værdier. således at en linje svare til en y værdig og en karaktere plads svare til en x værdig.

hvis i forstår?


Dette vil jeg gerne havde loadet ind i et 2 d char array.
Jeg ved at array'et kommet til at fylde char map_char[50][50]
så jeg ved godt hvor stor "kortet" er.
Men jeg prøvede med denne kode:
        //open map file
        ifstream map_file(map_location.c_str());

        //load map file to char map
        for(int i = 0; i <= 50; i++)
        {
            getline(map_file,map_char[i]);

        }

Men det kan man åbenbart ikke ;)
map_char er som sagt før defineret sålede: char map_char[50][50];

Er der nogle der har en idé til hvordan jeg løser dette problem?
eller skal jeg gribe det helt anderledes an?

Mvh.
Nicklas Warming Jacobsen
Avatar billede arne_v Ekspert
10. februar 2009 - 22:59 #1
Det kan laves paa flere maader.

Men en er:
- laes linier ind i string med getline
- hent de 50 tegn fra linien ind i raekke i 2D array
Avatar billede sn0wflake Nybegynder
10. februar 2009 - 23:11 #2
Som arne_v skriver "hent de 50 tegn fra linien ind i raekke i 2D array" fordi linien:

getline(map_file,map_char[i]);

...ser i mine øjne forkert ud. Det skulle f.eks. være:

getline(map_file,map_char[i][j]);

...eller noget i den stil hvis du forstår. Aner ikke om det er rigtigt fordi jeg ikke har mulighed for at teste det.
Avatar billede nicklasw Nybegynder
10. februar 2009 - 23:11 #3
skal jeg så for(bla;bla;bla++) og så tage det tegn for tegn?
Hvis ja hvordan får jeg så kun en byte (tegn) ud fra strin'en ad gangen?
Avatar billede nicklasw Nybegynder
10. februar 2009 - 23:13 #4
sn0wflake: ja men har jo en fil hvor jeg ved der er 50 linjer og 50 tegn per linje som jeg skal havde ind i den tilsvarende char array...
Har tænkt på noget lignende som du forslår men kan ikke rigtig tænke mig frem til hvordan jeg skal sætte det sammen
Avatar billede nicklasw Nybegynder
10. februar 2009 - 23:18 #5
aah tror jeg har fundet ud af det.. vender lige tilbage når jeg har kigget på det
Avatar billede sn0wflake Nybegynder
10. februar 2009 - 23:18 #6
Sidste gang jeg rodede med 2D arrays var i PHP, men de minder jo om hinanden i syntax. Kan huske at hvis man lavede et 2D array, og siden hen puttede værdier ind à la array[i] måden, så smadrede man arrayet. Tricket i mit tilfælde var array[i][j] stil.

It's just a hunch!
Avatar billede arne_v Ekspert
10. februar 2009 - 23:21 #7
Eksempel:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

const int DIM = 2;

typedef char square[DIM][DIM];

void readsquare(char *fnm, square sq)
{
    ifstream f(fnm);
    string line;
    int i = 0;
    while(getline(f, line))
    {
        for(int j = 0; j < line.length(); j++) sq[i][j] = line[j];
        i++;
    }
    f.close();
}

int main()
{
    square sq;
    readsquare("sq.dat", sq);
    for(int i = 0; i < DIM; i++)
    {
        for(int j = 0; j < DIM; j++)
        {
            cout << sq[i][j];
        }
        cout << endl;
    }
    return 0;
}
Avatar billede nicklasw Nybegynder
10. februar 2009 - 23:21 #8
der var den:

        //open map file
        ifstream map_file(map_location.c_str());

        //load map file to char map
        for(int i = 0; i <= 50; i++)
        {
            string temp;
            getline(map_file,temp);

            for(int ic = 0; ic <= 50; ic++)
            {
                map_char[i][ic] = temp[ic];
            }

        }

i kan begge ligge et svar.
Tror vist jeg er blevet lidt træt ;P
Avatar billede nicklasw Nybegynder
10. februar 2009 - 23:22 #9
nåår ja sådan kan man jo også gøre det
Avatar billede sn0wflake Nybegynder
10. februar 2009 - 23:25 #10
Godt du fik det løst :)
Avatar billede arne_v Ekspert
10. februar 2009 - 23:28 #11
svar
Avatar billede arne_v Ekspert
10. februar 2009 - 23:29 #12
PS: husk at

for(int ic = 0; ic <= 50; ic++)

laver 51 gennemloeb !!
Avatar billede nicklasw Nybegynder
10. februar 2009 - 23:30 #13
nåår ja.. glemmer altid der er char[0] ;)
Tak for reminderen
Avatar billede arne_v Ekspert
11. februar 2009 - 00:49 #14
Traditionen i C familien er at array starter med index 0.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester