» »

C++ in tabele

C++ in tabele

mercury ::

Živjo,
V c++ bi potreboval tabelo stringov, iz katere bi bral vrednosti. Če bi se dalo, bi najraje imel dvodimenzionalna tabelo, če kaj takega sploh obstaja. Torej, kako se ustvari tabelo konstanthin stringov, ter kako se iz nje bere? Vic je v tem, da delam command line program in delam na prepoznavanju ukazov.

L.P.

Vesoljc ::

za stringe vzameš
#include <string>
std::string     ime;


za array pa std::list ali pa std::vector, mogoče tudi std::map...

lahko pa tudi tako:
string    polje[666];
polje[0] = "bla bla";


glede cmd line, pa tkole, imho je težava v prepoznavanju samih parametrov, še posebaj če so bolj kompleksni (sestavljeni)... enkrat sem delal nekaj takega, pa sem naredil stupid brute way ;)
Abnormal behavior of abnormal brain makes me normal...

trs ::

char *bla[] = { "hello", "world", "kaj", "je", "to", "tisto", "kar", "rabis" };

int main(void) {
int ii;
for (ii = 0; ii < sizeof(bla) / sizeof(bla[0]); ii++)
printf("%d: %s\n", ii, bla[ii]);

}

Reso ::

Za enodimenzionalni array stringov, ki ima stringa dolge do 19 znakov:
char ArrayStringov[20][100];

Za dvodemenzionalni array stringov:
char ArrayStringov[20][100][100];

Pa še primer kako se v enodimenzionalni array zapiše string (se mi zdi da bi moralo delati):
ArrayStringov[10]="bla bla bla";

Zgodovina sprememb…

  • spremenil: Reso ()

mercury ::

Hvala fanjte. Sedaj kot sem to potuhtal sem naletel na nov problem - break ukaz ne deluje: V naslednji zanki, ki je del ene funkcije preprosto primerjam dva stringa ( temp_string in command_string ) ( ne uporabljam za to že izdelanih microsoftovih funkcij, ker imajo nekateri ukazi parametre ). No, tisti break ukaz ne zapusti for zanke ampak ne naredi nič, kar je v nasprotju s tem kar pravi help. Torej kaj delam narobe???

strcpy (temp_string , "sample" );
for ( int n = 0 ; n < 6 ; n++ )
{
if (string[n] /= command_string[n]) break;

if (n < 5) continue;

// command recognised
cout "sample command recognised";
return 0;
}

cout "unrecognised command";

teac ::

Mislim, da ne moreš kar tako primerjat stringov (if (string_1 == string_2).
Uporabi strcmp (string_1, string_2). Funkcija vrne 0, če sta stringa enaka, 1, če je prvi string večji od drugega in -1, če je drugi string večji od prvega (mislim da je tako pri 1 in -1, čene pa je obratno).

Vesoljc ::

zato pa uporabljaj std::string
string ena = "ena";
string dva = "dva";

if( ena == "ena" )
    // do stuff
if( dva != "ena" )
    // do stuff
if( ena == dva )
    // do stuff
Abnormal behavior of abnormal brain makes me normal...

mercury ::

Ravno tega ne smem narediti. Stringov ne primerjam string1 == string2 ampak string1[n] == string2[n] v for zanki, torej primerjam znak za znakom. Funkcijo strcmp pa ne morem kar tako uporabljati, saj imajo nekateri ukazi parametre, npr.:

locate(+50,102,+231,-67)

Zato strcmp-a ne morem uporabiti in moram primerjati char-je enega za drugim. To mi uspeva v for zanki, problem pa je da mi ukaz break ne deluje ( ne prekine izvajanja for zanke ). Torej kaj je narobe s tem break ukazom?

Lep pozdrav,

OwcA ::

Pa se pogoj kdaj dejansko izpolni?
Četudi primerjaš znak za znakom, ni nobenega dobrega argumenta proti uporabi std::string. ;)
Otroška radovednost - gonilo napredka.

Vesoljc ::

mercury, veš da ima string lahko tudi dolžino ena? ;)
Abnormal behavior of abnormal brain makes me normal...

rasta ::

Za ukaze tega tipa locate(+50,102,+231,-67) pa ti kar uporabi avtomat končnih stanj, da ti ukaz razbije v lexeme (leksikalna analiza), potem pa s sinaktično analizo (kakšen top-down način) preveriš pravilnost in ukaz na v zadnji fazi še izvršiš.
Parsanje torej.

Če boš preverjal črko za črko, ne boš nikamor prišel (naredil 1000 vrstic blazno komplicirane in bugaste kode, ki ne bo počela praktično nič).

BigWhale ::

> Za ukaze tega tipa locate(+50,102,+231,-67) pa
> ti kar uporabi avtomat končnih stanj, da ti ukaz
> razbije v lexeme (leksikalna analiza), potem pa
> s sinaktično analizo (kakšen top-down način)
> preveriš pravilnost in ukaz na v zadnji fazi še
> izvršiš.
> Parsanje torej.

Hm, Overkill? :P


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] vprašanja (strani: 1 2 3 4 5 6 7 8 9 )

Oddelek: Programiranje
44726774 (11320) aljazko1995
»

Program ne deluje več (strani: 1 2 )

Oddelek: Programiranje
506311 (5049) Genetic
»

[cpp]Kako ugotoviti koliko zapisov je v arrayu?

Oddelek: Programiranje
6796 (715) technolog
»

[C/C++] pointerji in reference

Oddelek: Programiranje
111963 (1787) Matako
»

int to string v c++

Oddelek: Programiranje
272280 (2008) OwcA

Več podobnih tem