Forum » Programiranje » int to string v c++
int to string v c++
mISOk ::
Zdravo!
Imam eno kratko vprašanje. Zanima me kako bi pretvoril int to string v c++. Moram združevanti v string nek niz in mu na konec dodajam nove številke. Zanima me kako sedaj spojiti niz z int vrednostjo.
Primer:
m++;
int y=niz[m-1];
y=y % 6;
niz=niz + y; //to bi želel združiti
Hvala
LP
Imam eno kratko vprašanje. Zanima me kako bi pretvoril int to string v c++. Moram združevanti v string nek niz in mu na konec dodajam nove številke. Zanima me kako sedaj spojiti niz z int vrednostjo.
Primer:
m++;
int y=niz[m-1];
y=y % 6;
niz=niz + y; //to bi želel združiti
Hvala
LP
=]
OwcA ::
Morda kanček prehuda, ampak lehko poskusiš s std::stringstream:
namesto str() metode se lahko seveda igraš tudi z operatorjem >>.
std::stringstream ss; ss << niz << y; niz = ss.str();
namesto str() metode se lahko seveda igraš tudi z operatorjem >>.
Otroška radovednost - gonilo napredka.
mISOk ::
Hvala.
Sej ne da ne bi bil hvaležen, ampak a obstaja kakšen enostavnejši način, neki podobnega kot v delphiju npr. IntToStr.
Program pišem v c++ , ker poizkušam en algoritem malo pospešiti, vnašam neko izobljšava pa prejšnji je bil pisan v delphiju pa je kr počasen in bi rad pridobil kakšen procent na hitrosti tudi s c++.
LP
Sej ne da ne bi bil hvaležen, ampak a obstaja kakšen enostavnejši način, neki podobnega kot v delphiju npr. IntToStr.
Program pišem v c++ , ker poizkušam en algoritem malo pospešiti, vnašam neko izobljšava pa prejšnji je bil pisan v delphiju pa je kr počasen in bi rad pridobil kakšen procent na hitrosti tudi s c++.
LP
=]
OwcA ::
Tole je skoraj gotovo najhitrejše, če uporabiš prav. Torej, da mečeš notri in nato naenkrat vse pobereš ven.
Otroška radovednost - gonilo napredka.
mISOk ::
std::stringstream ss; to mi ne zagrabi!
Javi mi:
Undefined structure 'stringstream'
help;
Javi mi:
Undefined structure 'stringstream'
help;
=]
OwcA ::
Kakšno knjižnico bi veljalo vklučiti, recimo <sstream>
P.S. kateri prevajalnik uporabljaš?
P.S. kateri prevajalnik uporabljaš?
Otroška radovednost - gonilo napredka.
Zgodovina sprememb…
- spremenilo: OwcA ()
mISOk ::
Borladn c++ 5.5
Trenutno sem omagal, ne morem več. Hvala za pomoč.
Imam še en problem . Kako pretvoriti pa iz stringa v char.
Imam primer kjer na določeno vrednost x odpiram ustrazno txt datoteko.
ifstream beri("pot\\ime"+x+".txt");
To mi noče delat napiše mi "Lvalue required". Probam ga prelesičit tako da naredim:
string pot = "pot\\ime"+x+".txt"; //dela
ifstream beri(pot);
Mi vrne: "Could not find a match for 'ifstream::basic_ifstream(string)'" torej ne dela string moram dati noter char!
LP
Trenutno sem omagal, ne morem več. Hvala za pomoč.
Imam še en problem . Kako pretvoriti pa iz stringa v char.
Imam primer kjer na določeno vrednost x odpiram ustrazno txt datoteko.
ifstream beri("pot\\ime"+x+".txt");
To mi noče delat napiše mi "Lvalue required". Probam ga prelesičit tako da naredim:
string pot = "pot\\ime"+x+".txt"; //dela
ifstream beri(pot);
Mi vrne: "Could not find a match for 'ifstream::basic_ifstream(string)'" torej ne dela string moram dati noter char!
LP
=]
OwcA ::
Iz std::string dobiš polje znakov (char *) z metodo c_str().
Otroška radovednost - gonilo napredka.
OwcA ::
Še to, nizov znakov ne moreš kar tako seštevati, std::string lahko, char* (kar "blabla" predstavlja) pa ne.
Otroška radovednost - gonilo napredka.
64202 ::
> cat x.cpp #include <string> #include <cstdio> std::string int2str(int x) { char buf[64]; sprintf(buf, "%d", x); return buf; } int main() { for(int i=0; i<10000000; ++i) int2str(i); return 0; } > g++ -O3 x.cpp > time ./a.out real 0m4.826s user 0m4.699s sys 0m0.019s > cat y.cpp #include <string> #include <sstream> std::string int2str(int x) { std::stringstream ss; ss << x; return ss.str(); } int main() { for(int i=0; i<10000000; ++i) int2str(i); return 0; } > g++ -O3 y.cpp > time ./a.out real 0m17.107s user 0m16.670s sys 0m0.025s
nevone ::
Da rezimiram:
tole:
ifstream beri("pot\\ime"+x+".txt");
v tole:
char pot[64];
sprintf(pot, "pot\\ime%d.txt", x);
ifstream beri(pot);
A je kej prov?
o+ nevone
tole:
ifstream beri("pot\\ime"+x+".txt");
v tole:
char pot[64];
sprintf(pot, "pot\\ime%d.txt", x);
ifstream beri(pot);
A je kej prov?
o+ nevone
Either we will eat the Space or Space will eat us.
Zgodovina sprememb…
- spremenila: nevone ()
64202 ::
Tipicno C-jasko programiranje!
Ta stvar bo imela buffer overflow na 177 in vec bitnih arhitekturah! Oziroma ce upostevamo se - znak za negativna %d stevila, se prej! Groza!
>>> d = int('1' + ('0' * (64-len("pot\\ime.txt")))) >>> d 100000000000000000000000000000000000000000000000000000L >>> pow(2, 176) >= d False >>> pow(2, 177) >= d True
Ta stvar bo imela buffer overflow na 177 in vec bitnih arhitekturah! Oziroma ce upostevamo se - znak za negativna %d stevila, se prej! Groza!
Gundolf ::
#include <string> #include <sstring> #include <fstream> int i; std::string s; // int -> string std::strinstream ss; ss << i; s = ss.str(); // string -> int std::strinstream ss(s); ss >> i; // seštevanje stringov std::string fname = std::string("pot\\ime") + s + ".txt" // odpiranje fajla std::ifstream file(fname.c_str());
Takole, mislim da je to vse. Sicer pa sigurno imaš kakšno pomoč glede sistemskih funkcij. In če ti tam piše, da ifstream kot parameter vzame const char* mu ne poskušaj uturiti std::stringa. Še en tip glede seštevanja - seštevaš lahko string + string ali pa string + char*. Zato mora biti prva stvar pri seštevanju vedno std::string (glej zgornjo kodo), potem pa ji lahko dodajaš stringe in char*. Pretvorbe iz ostalih tipov pa le preko stringstreama. In ni ti treba pisat funkcije int2str ampak lahko najprej cel niz narediš v stringstreamu pa ga potem vrneš kot string ali pa celo kar direktno z njim kaj narediš.
mISOk ::
Zdravo!
Najprej hvala Gundolf za rešitev. Uporabil sem tvojo rešitev in stvar sprogramiral do konca. Odpravi še tipkarske hrošče in začel zadevo testirati. Prišel sem do zanimivih rezultatov (za mene zalostnih rezultatov).
Program napisan v c++ (imam Borland C++ Compiler 5.5) dela do 5x počasneje kot enak program napisan v Delphi-ju 6. Pa ravo zaradi hitrosti sem pisal program za c++ ker sem ga želel za kak procent pospešiti. zdaj me pa zanima v čem je stos.
Razlika med c++ in delphi kodo programa je v glavnem ni (razen sintaktičnih sprememb). Ali je težava slab c++ prevajalnik ali mogoče to spreminjanje tipov s pomočjo std::stringstream, ker bistvene razlike drugje ne vidim.
delphi -I-I- c++
case -I-I- switch
for -I-I- for
repeat -I-I- do-while
mod -I-I- %
div -I-I- /
Drugo pa nimam.
Poleg tega, da dela delphi v grafičnem načinu, kar bi moral biti minus zanj in plus za c++, ker ne dela v grafiki.
Ima kdo kakšno idejo.
p.s. Upam, da je kriv prevajalnik.
LP
Najprej hvala Gundolf za rešitev. Uporabil sem tvojo rešitev in stvar sprogramiral do konca. Odpravi še tipkarske hrošče in začel zadevo testirati. Prišel sem do zanimivih rezultatov (za mene zalostnih rezultatov).
Program napisan v c++ (imam Borland C++ Compiler 5.5) dela do 5x počasneje kot enak program napisan v Delphi-ju 6. Pa ravo zaradi hitrosti sem pisal program za c++ ker sem ga želel za kak procent pospešiti. zdaj me pa zanima v čem je stos.
Razlika med c++ in delphi kodo programa je v glavnem ni (razen sintaktičnih sprememb). Ali je težava slab c++ prevajalnik ali mogoče to spreminjanje tipov s pomočjo std::stringstream, ker bistvene razlike drugje ne vidim.
delphi -I-I- c++
case -I-I- switch
for -I-I- for
repeat -I-I- do-while
mod -I-I- %
div -I-I- /
Drugo pa nimam.
Poleg tega, da dela delphi v grafičnem načinu, kar bi moral biti minus zanj in plus za c++, ker ne dela v grafiki.
Ima kdo kakšno idejo.
p.s. Upam, da je kriv prevajalnik.
LP
=]
OwcA ::
Imaš vklopljene optimiziacije?
Resda C++ Builder ni ravno čudež od prevajalnika, ampak tako počasi pa vseeno ne bi smelo biti.
Pokažeš morda celo kodo?
Resda C++ Builder ni ravno čudež od prevajalnika, ampak tako počasi pa vseeno ne bi smelo biti.
Pokažeš morda celo kodo?
Otroška radovednost - gonilo napredka.
Nerdor ::
mISok: Borland vas je (C++ programerje) Punked! Zakaj!? Ker več kot očitno je Delphi prevajalnik optimiziran za Delphi. VCL framework pa za Delphi jezik. Glej, ker je bilo vse več "tečk", ki so tečnarile, kako je C++ kul in te "tečke" hočejo C++ za vsako ceno. Pa je Borland napravil CBuilder. Finta je v temu, da je Delphi jezik precej bolj strog v sintaksi in močno tipiziran, kar za C++ ne moremo reči. Vse preveč ponuja razno raznih varijacij rešitev, da je JOJ! In pri upoštevanju teh razno raznih varijacij C++ Delphi compiler pač proizvede počasno in "nekvalitetno" kodo. Your bad, ker hočeš za vsako ceno C++ ne da bi se vprašal, ali je to dejansko prednost!? NE ni! Delphi kot tak je izjemno kvaliteten jezik (za moj okus bolj kot bebava sintaksa C++, bite me!) in kot IDE zelo kvalitetno orodje in naj bo v prihodnje tako.
... for lifetime!
mISOk ::
Nerdor hvala za odgovor. prvo sem jo napisal v delphiju, ker mi je sintaksa najbližja "PASCAL FREAK". Sam niti nisem želel pisati za c++, ampak se dobil info da bom zadevo lahko pohitril. Pa sem napisal v c++. Ni mi žal, da sem ga napisal saj sem spet obnovil za mene pozabljeno c++ sintakso. Zdaj ko vidim, da ni prednosti bom poizkušal kodo napisano v c++ optimizirati v linux in videti, če vseeno dobim kaj na hitrosti (da ne bo vso delo šlo v nič).
p.s. Kdo ve kako optimizirati kodo v linux naj mi sporoči. Nisem tega še nikoli počel.
p.s. Kdo ve kako optimizirati kodo v linux naj mi sporoči. Nisem tega še nikoli počel.
=]
64202 ::
Kaj bi pa rad optimiziral? Nasploh je to, da gres v drug jezik prepisat program, zadnja moznost. Sploh ker ima Delphi ucinkovit prevajalnik. Obicajno optimiziras tako, da TOCNO najdes* od kje do kje ti program pokuri najvec casa - nasploh se vecinoma izkaze, da imas nekje par procentov kode, ki ti pokuri 90% celotnega izvajalnega casa. Problem resis tako, da uporabis bolj ucinkovit algoritem, recimo hash tabelo namesto linked lista. Edino realno prednost, ki jo ima C(++), je ce moras v neki kratki for zanki zmlet nekaj 10MB podatkov (recimo kriptiranje), pa se to glede na Delphi verjetno ni tako grozno velika razlika - vec kot 30-50% ne bi smelo biti.
* en delphijas naj da link na kaksen dober profiler
* en delphijas naj da link na kaksen dober profiler
64202 ::
> Finta je v temu, da je Delphi jezik precej bolj strog v sintaksi in močno tipiziran, kar za C++ ne moremo reči. Vse preveč ponuja razno raznih varijacij rešitev, da je JOJ! In pri upoštevanju teh razno raznih varijacij C++ Delphi compiler pač proizvede počasno in "nekvalitetno" kodo.
Delphi ni dovolj "strog", da bi mu to samo po sebi pri generiranju kode kaj pomagalo. Razlika je predvsem v tem, da je pravilen (in dober) C++ kompiler skoraj nemogoce napisati :), ne postavlja pa sam jezik vecjih zaprek optimizerju napram delphiju. Primer jezika, ki se ga pa da samega po sebi bolje optimizirat, je pa Fortran - namrec nima dinamicne alokacije pomnilnika AFAIK.
Delphi ni dovolj "strog", da bi mu to samo po sebi pri generiranju kode kaj pomagalo. Razlika je predvsem v tem, da je pravilen (in dober) C++ kompiler skoraj nemogoce napisati :), ne postavlja pa sam jezik vecjih zaprek optimizerju napram delphiju. Primer jezika, ki se ga pa da samega po sebi bolje optimizirat, je pa Fortran - namrec nima dinamicne alokacije pomnilnika AFAIK.
Zgodovina sprememb…
- spremenilo: 64202 ()
64202 ::
Kot opozorilo naslednjim generacijam, ki razmisljajo, da bi program napisali/prepisali v C++, dajem naslednje vprasanje: kaj izpise ta program?
Mozni odgovor(i):
#include <iostream> struct X { X() { std::cout << "A" << std::endl; } X(const X &o) { std::cout << "B" << std::endl; } }; X getX() { X x; return x; } int main() { X x(getX()); return 0; }
Mozni odgovor(i):
$ g++ --version g++ (GCC) 3.2.3 Copyright © 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ g++ x.cpp $ ./a.out A $ > cl /EHsc x.cpp Microsoft ® 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86 Copyright © Microsoft Corporation 1984-2002. All rights reserved. x.cpp Microsoft ® Incremental Linker Version 7.10.3077 Copyright © Microsoft Corporation. All rights reserved. /out:x.exe x.obj > x A B >
64202 ::
62404 prvi post: res je. Dober in pravilen c++ kompajler je težko napisati. Sam vseeno c++ kot tak ponuja malce preveč "svobode" kot delphi jezik, kar tudi lahko botruje k temu, da je težko napisati dober kompajler zanj (za c++).
Ce smo cisto konkretni - kje ta svoboda skodi pri hitrosti? Edina razlika, ki jo vidim jaz, je da lahko v c++ pises po ramu kolikor hoces, v delphiju pa ne (ali pac?). Tezava pri optimizaciji so torej lahko pointerji. Vprasanje pa je, ali delphi zaradi svoje omejitve lahko kaj bolj optimizira kodo? Po moje ne, kvecjemu obratno, ce delphi preverja dostope v run-timeu. Podobno kot c++ tudi delphi nima just in time compilerja, torej tudi ta oblika optimizacije odpade.
Ce smo cisto konkretni - kje ta svoboda skodi pri hitrosti? Edina razlika, ki jo vidim jaz, je da lahko v c++ pises po ramu kolikor hoces, v delphiju pa ne (ali pac?). Tezava pri optimizaciji so torej lahko pointerji. Vprasanje pa je, ali delphi zaradi svoje omejitve lahko kaj bolj optimizira kodo? Po moje ne, kvecjemu obratno, ce delphi preverja dostope v run-timeu. Podobno kot c++ tudi delphi nima just in time compilerja, torej tudi ta oblika optimizacije odpade.
Vesoljc ::
@64202
in kateri je po tvoje bolj pravilen?
ehhh pozabi na vprašanje... tema gre off topic!
za flame war delphi VS C++ si odprite novo temo, ja?
in kateri je po tvoje bolj pravilen?
ehhh pozabi na vprašanje... tema gre off topic!
za flame war delphi VS C++ si odprite novo temo, ja?
Abnormal behavior of abnormal brain makes me normal...
Zgodovina sprememb…
- spremenil: Vesoljc ()
64202 ::
Hehe, sem par dni iskal bug, ker sem predpostavil AB (jasno ). Bi bilo zanimivo videt, kaj rece standard. Tezko verjamem, da bi kaj taksnega kiksnili. Imam sicer se en kup takih neumnosti, samo so dokazi veliko daljsi, oziroma mi jih ni ratalo (== se mi ni dalo) ponovit v cisti "int main()" verziji.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] struct in int[] (strani: 1 2 )Oddelek: Programiranje | 7432 (6505) | MrBrdo |
» | Mucim se z nalogo C++Oddelek: Programiranje | 1188 (1025) | MareMareCare |
» | C++ preštej število enkOddelek: Programiranje | 1313 (1096) | kihc |
» | [C++] Pretvorba iz int v char *Oddelek: Programiranje | 2973 (2349) | Gundolf |
» | [C++] - Tolmačenje povedi in izvedba operacij nad števkamiOddelek: Programiranje | 3356 (2592) | jernejl |