manganMedlem sedan feb. 2003219 inlägg
Hej hopp!
Nu har jag typ letat skitmycket efter ett bra sätt att göra om en integer till string i C++. Jag har hittat ett par förslag men de fungerar inte i datormiljön på skolan. Problemet som jag vill applicera detta på är följande:
f1 e mitt objekt.
jag vill ta f1.year och sätta ihop det med f1.title för att få en "nyckel" till min sort så den sorterar på år/titel. Något sådant här vill jag göra rent tankemässigt:
film1 = f1.year + f1.title;
och få ngt sådant här i strängen film1:
2001Lord of the rings
Jag har försökt med att använda char* som jag har gjort malloc på och sen har jag trixat med sstream. sstream funka hemma men i skolan gjorde det inte det, alltså kan jag inte använda det.
Mc FettoMedlem sedan nov. 20021 920 inlägg
#include <iostream>
#include <sstream>
int main()
{
int i = 1000;
std::ostringstream to_str;
to_str<< i;
std::cout<< to_str.str() <<std::endl;
std::cin.get();
}
Nu ligger strängen i to_str.str() och man kan enkelt konkatenera den med en annan sträng :)
manganMedlem sedan feb. 2003219 inlägg
tack för hjälpen! skrev enligt ditt förslag Mc Fetto och det löste alla problem. gjorde sen om det till en template så jag kunde ta bort 20-30 rader kod.
template <class T>
string toString(T& in) {
ostringstream strang;
strang << in;
return strang.str();
}
:D
Mc FettoMedlem sedan nov. 20021 920 inlägg
Alltid kul att för en gångs skull hjälpa till!! :D
OsaouMedlem sedan aug. 20036 inlägg
Eller, så kan man gå den hårda vägen, som jag fick göra. :)
Detta fungerar också alldeles utmärkt, med reservation för att Mc Fettos exempel drar mindre systemresurser då det antagligen arbetar direkt på bit-nivå.
Klassen "Text" emulerar "string", vilken inte mitt gymnasiums kompilatorer hade stöd för. Dess metod content() returnerar en char array vilken innehåller objektets strängvärde (duh, some might say ;)).
Om någon är intresserad kan jag även skicka med hela den klassen i en senare post, säg bara till!
Anyway, här kommer kod med funktioner för att:
- erhålla antal siffror i ett heltal
- omvandla strängar till heltal
- omvandla heltal till strängar
int nrofnum(long number){ // returnerar antal siffror i ett heltal
int tot_nr = 1;
while ((double)number/pow(10,tot_nr)>=1)
tot_nr++;
return tot_nr;
}
char * nrtostr(long number){ // returnerar en array bestående av char's - ett heltal "omvandlat" till sträng
Text str;
char * ret;
long cur_number, japp_nr, prev_nr = 0, nr_numbers = nrofnum(number), inv_nr = nr_numbers-1;
ret = new char[nr_numbers+1];
for (int i=-1; ++i<nr_numbers;){
japp_nr = (long)((double)number/pow(10,inv_nr));
cur_number = japp_nr-(prev_nr*10);
str += "x";
str[i] = (char)(cur_number+48);
prev_nr = japp_nr;
inv_nr--;
}
strcpy(ret,str.content());
return ret;
}
long strtonr(char * str){ // returnerar ett heltal "omvandlat" från en sträng
long ret;
for (int incr=0; incr<strlen(str); incr++)
ret += (long)str[incr];
return ret;
}
Och ja, jag vet att det inte dirket är bästa sättet att utföra detta på. Men, men...
Alpha IIMedlem sedan maj 20002 579 inlägg
char buffer[50];
sprintf(buffer,"%d: %s",atoi(f1.year),f1.title);
Tycker detta verkar enklare :)
OsaouMedlem sedan aug. 20036 inlägg
Alpha II, man kanske inte vill skriva ut sträng-talet direkt, utan t.ex. multiplicera det med ett annat tal... ;)
Alpha IIMedlem sedan maj 20002 579 inlägg
Då är det väl bara att göra det innan man skriver ut det?! :q :o
Sang-draxMedlem sedan juli 2002570 inlägg
mangan, gör om ditt template så att det tar const T& så blir det ännu bättre.