Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pretvaranje stringa u niz

[es] :: C/C++ programiranje :: Pretvaranje stringa u niz
(Zaključana tema (lock), by leka)

[ Pregleda: 4138 | Odgovora: 3 ] > FB > Twit

Postavi temu

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sephiroth?
Balkan @ net

Član broj: 79406
Poruke: 82
*.PPPoE-3382.sa.bih.net.ba.



Profil

icon Pretvaranje stringa u niz17.04.2006. u 12:18 - pre 159 meseci
Hitno mi treba mala pomoc, jednostavno kako bi u c++-u pretvorio neki string u niz tj
npr. string "primjer" u niz
niz [1]= p
niz [2]= r
niz [3]= i
niz [4]= m
niz [5]= j
niz [6]= e
niz [7]= r

Isto tako kako bi ucitao neki string iz file-a u program? u file-u neka bude znaci string a program da unosi karaktere jedan po jedan u neki niz...

Primjer koji sve ovo obuhvata a treba mi rjesenje je ustvari kako npr. iz filea prenijeti slijedecu matricu "n" redova i "m" kolona u neki dvodimenzionalni niz (npr. niz[n][m])?

primjer slicne matrice u file-u:

.+----+..
.|..k...|..
.|...v..|..
.+----+..

Eto to je konkretno znaci taj primjer. Znaci kako prenijeti ovu matricu u program?

Hvala unaprijed na pomoci!
 
0

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..81.static.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: Pretvaranje stringa u niz17.04.2006. u 15:46 - pre 159 meseci
Odgovor: tako sto koristis neke osobine str::string tipa.

Kako najbolje pokazuje sledeci primer:
Code:

#include <iostream>

using namespace std;

int main(int argc, char**argv)
{
  string str = "Dobar dan";
  cout << str[2] << endl;
} // main() function

Na izlazu ces dobiti slovo "b", naravno.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
0

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Pretvaranje stringa u niz17.04.2006. u 20:39 - pre 159 meseci
string je niz...
 
0

z@re
Zarko Bulatovic
H1 Telekom, UNIX Systems Engineer
Split, Spinut

Član broj: 29849
Poruke: 443
*.cmu.carnet.hr.



+25 Profil

icon Re: Pretvaranje stringa u niz18.04.2006. u 01:55 - pre 159 meseci
Kako rece Leka, string je niz...niz znakova (char). Zapravo u C++-u "string" je klasa unutar std namespacea, koja sluzi za lako baratanje s rijecima, recenicama...Ta klasa ima overloadiran operator polja, [], tako da se moze pristupati svakom podelementu stringa, koji je zapravo znak.

Znaci ako ti deklariras string temp = "bla bla";, ti tom stringu pristupas kao obicnom nizu, ako zelis doc do njegovih podznakova. temp[2] je znak 'a', itd...

Sad, sta se tice tvog drugog pitanja, ti zapravo trebas kreirat niz stringova, a u svakom clanu tog niza, je jedna linija tvoje .txt datoteke. Posto je svaki clan niza string koji sadrzi jednu liniju teksta, taj clan je opet niz. A clanovi tog niza su znakovi koji su sadrzani u toj liniji.

Tuzno je da bi se ovakav primjer jednostavnije rjesio iz C-a, jer C ipak ima mnogo razradjenije facilitye za dinamicku realokaciju memorije. Problem lezi u tome, sta ti neznas koliko tvoj txt file ima linija, dakle neznas na koliko ces inicijalizirat to polje stringova. Mozes nekako izbrojat, ali to je zaobilazenje problema. Uvijek mozes koristiti realloc() C-funkciju, medjutim to nije niposto dobro, mjesat C i C++ kod kad govorimo o alokaciji memorijskog prostora.

Najlaksi i najbolji nacin kojeg se mogu trenutno sjetit je da prvo sve te linije ubacis u jedan vector. Vectori su dio STL-a (ili STDC++-a), nesto poput vezanih lista. Vector je templatiziran, to znaci da ga jednom jednostavnom kljucnom rijeci mozemo natjerati da prima ulazne elemente tipa string.

Ovako bi to islo :

Code:

#include<iostream>
#include<fstream>
#include<cstdlib>
#include<vector>

using namespace std;

int main()
{
    fstream testfile;
    vector<string> testvector; string temp;
    testfile.open("test.txt", ios::in );
    
    while(!testfile.eof()) 
    {
        getline(testfile, temp); 
        testvector.push_back(temp);
    }
    
    for(int i = 0; i < testvector.size(); i++)
    {
        for(int j = 0; j < testvector[i].size(); j++)
            cout << testvector[i][j];
        cout << endl;
    }
    
    system("PAUSE"); return EXIT_SUCCESS;    
}



Skroz jednostavan kod. Prvo smo deklalirali tri varijable. fstream klasa omogucuje I/O operacije nad datotekama, slicno kao FILE struktura u C-u. Jedan vektor, ciji su elementi stringovi, u kojeg cemo skladistit podatke, i jedan temporary string koji ce nam posluzit prilikom iscitavanja iz datoteke.

Dalje, pozivajuci metodu open otvaramo datoteku za iscitavanje. "open" metodi smo poslali dva argumenta - ime datoteke iz koje se iscitava, i jedan flag, ios::in, koji oznacava da cemo iz dane datoteke izvlacit podatke. To jest, otvaramo datoteku u "read" rezimu.

Nakon toga, ulazimo u while petlju za iscitavanje. while petlja se vrti sve dok nije doslo do kraja datoteke, sto nam pokazuje metoda eof iz fstream klase. Funkcijom getline iscitavamo jednu liniju teksta iz "testfile-a" u string temp, pa kasnije pozivajuci metodu push_back iz klase vector taj temp ubacujemo u vector. Tim nacinom svaku liniju teksta ubacujemo u temporary string, a taj string injectiramo u vector.

Na kraju, nas vector sadrzi kompletnu tekstualnu datoteku. "for" petlja nam sluzi da ispisemo taj sadrzaj, znak po znak, kako tebi i treba. Vanjska petlja nas vrti kroz linije, a unutranja kroz podznakove svake linije teksta. Vanjskoj petlji je krajnja vrijednost sama duzina vektora, dakle broj clanova u njemu, koju hvatamo sa size() metodom. Unutarnjoj petlji je krajnja vrijednost duzina trenutnog clana u vektoru, dakle stringa. Pazi da moramo notirati sa [] znakovima da hvatamo duzinu odredjenog clana. Nakon toga ispisujemo trenutni znak, koji se nalazi na iteraciji i, j. Jos, estetike radi, svaki put kad unutarnja petlja zavrsi iteriranje, ispisemo praznu liniju sa cout << endl;, kako i treba.


[12:33am] <alek> deca od 3-5 godina prvi spoznaju ljubav bozju :)


Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
 
0

[es] :: C/C++ programiranje :: Pretvaranje stringa u niz
(Zaključana tema (lock), by leka)

[ Pregleda: 4138 | Odgovora: 3 ] > FB > Twit

Postavi temu

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.