pitäisi siis tiedostosta luettu char-tyypin muuttuja tallettaa moniulotteiseen taulukkoon.
taulukko on muotoa
char taulukko[][20]=0;//alustetaan tyhjäksi
muuttuja on myös tyyppiä char:
char muuttuja[20]=0;//alustetaan tyhjäksi
ongelma vaan on se, että näille ei voi tehdä näin:
taulukko[1][20]=muuttuja;//virhe taulukko[1][muuttuja];//virhe
käyttäisin c++:n string otsikkotiedostoa, jos olisi pienikin käsitys siitä, mitäs string-taulukot toimivat, jos toimivat...
onko ideoita?
Varmaankin taulukossa olet määritellyt tuon toisenkin dimension, eihän sitä tyhjäksi voi jättää. ^^ Tekstin kopiointi onnistuu strcpy- tai strncpy-funktiolla (string.h).
char taulu[1][20]; strcpy(taulu[0], teksti); // Ylivuotovaara, jos teksti on pidempi kuin taulu[0] strncpy(taulu[0], teksti, 19); // Enintään 19 merkkiä, lisätään vielä itse varmuudeksi nollamerkki taulu[0][19] = 0;
ByteMan kirjoitti:
käyttäisin c++:n string otsikkotiedostoa, jos olisi pienikin käsitys siitä, mitäs string-taulukot toimivat, jos toimivat...
onko ideoita?
Kannattaa käyttää string-vektoria:
#include <vector> #include <string> int main() { std::vector<std::string> taulukko(3, ""); // (koko, alustusarvo) taulukko[0] = "Sitä"; taulukko[1] = "sun"; taulukko[2] = "tätä"; return 0; }
edit:
Huomaa, että string:ien ei tässä tarvitse olla yhtä pitkiä.
Voit tarvittaessa muuttaa string-vektorin kokoa resize-metodilla:
taulukko.resize(10, ""); // (uusi_koko, alustusarvo_uusille_alkioille)
(Mod. Edit. Kooditagit. Järkevä sisennyskin olisi suotavaa noin esimerkkikoodeissa.)
Metabolix kirjoitti:
Varmaankin taulukossa olet määritellyt tuon toisenkin dimension, eihän sitä tyhjäksi voi jättää. ^^
kyllä sen oikeestaan tilanteesta riippuen voi jättää tyhjäks...
en vaa tienny oikee mitä siihen laittas ku tiedostossa joka luetaan taulukkoon on päälle 90000 riviä et mietin asiaa
----------------------------------------------------
taidan siirtyä käyttämään tota string vektori juttuu vaikuttaa kätevämmältä...
kiitoksia avusta
ByteMan kirjoitti:
kyllä sen oikeestaan tilanteesta riippuen voi jättää tyhjäks...
Pitää paikkansa, mutta tämä ei käsittääkseni ole niitä tilanteita. Vai onko kyseessä joku ero C:n ja C++:n välillä? Osaan vain C:tä enkä sitäkään kovin hyvin.
int array[] = {0, 0, 0}; int array[][N] = {{0}, {0}, {0}};
Näissä kokoa ei tarvitse merkitä, koska voidaan päätellä, että se on 3. Mutta jos laitat tuohon pelkän nollan, niin eihän kone voi tietää paljonko muistia täytyy varata.
juu oot oikeessa toi ei oo niit tilanteita...
eli tuleepa kuitenki törkeän kokoinen taulukko teki sitten vektoreilla tai ei(91592 alkiota^^) minkäs teet...
[edit]
olisko moniulotteinen(esim. 2D) vektori
vector<string> taulukko(3,4, "")
Mitä oikein selität? Ei se data pienemmäksi muutu, vaikka sen kuinka laittaisit.
meinasin olisiko moniulotteisen vektorin koodi syntaksi(tai mikä lie kirjoitus asu)
vector<string> taulukko(3,4, "")
kun esimerkiksi moniulotteisen taulukon syntaksi olisi
int moniulotteinentaulukko[3][5];
mutta pahoittelen jos tekstistä ymmärsi väärin... en yrittänyt sitä dataa pienentää =/
ByteMan kirjoitti:
olisko moniulotteinen(esim. 2D) vektori
vector<string> taulukko(3,4, "")
2D-vektori toimii näin:
using std::vector; using std::string; // -- vector < vector<string> > riveja; // Vektori vektoreita vector<string> eka; riveja.push_back(eka); riveja[0].push_back("teksti 1"); riveja[0].push_back("teksti 2"); riveja.push_back(eka); riveja[1].push_back("kolmas"); cout << riveja[0][1] << " - " << riveja[1][0] << "\n";
Jolloin tulostus olisi: "teksti 2 - kolmas".
Lyhyempi tapa luoda 2D-vektori (eli vektorillinen (saman kokoisia) vektoreita)
#include <iostream> #include <string> #include <vector> int main() { // 5x6 2D-vektori std::vector< std::vector<std::string> > taulukko(5, std::vector<std::string>(6, "")); taulukko[2][3] = "Hello"; taulukko[4][1] = "World"; std::cout << taulukko[2][3] << " " << taulukko[4][1]; return 0; }
Ja käytännöllisempi, toiminnaltaan varmempi, vähemmän muistia käyttävä ja luultavasti myös nopeampi tapa esitellään koodivinkissä Dynaamiset taulukot. Ajatuksena siis on käyttää yksiulotteista vektoria kaksiulotteisena tähän tapaan:
#include <vector> vector<int> taulu; int kokox = 7, kokoy = 123; taulu.resize(kokox * kokoy); taulu[y * kokox + x] = 0;
metabloix: toimiiks toi myös string-tyyppiseen dataan?
mistä kaikenlisäksi ei etukäteen ole mitään käsitystä montako niitä vektoreita tarvitaan?
EDIT
en tajunnu tosta dynaamiset taulukot jutusta mitään... >.<
Aihe on jo aika vanha, joten et voi enää vastata siihen.