webForumDet fria alternativet

Göra om Integer till string!

8 svar · 466 visningar · startad av mangan

manganMedlem sedan feb. 2003219 inlägg
#1

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
#2
 #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
#3

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
#4

Alltid kul att för en gångs skull hjälpa till!! :D

OsaouMedlem sedan aug. 20036 inlägg
#5

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:

  1. erhålla antal siffror i ett heltal
  2. omvandla strängar till heltal
  3. 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
#6
char buffer[50];
sprintf(buffer,"%d: %s",atoi(f1.year),f1.title);

Tycker detta verkar enklare :)

OsaouMedlem sedan aug. 20036 inlägg
#7

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
#8

Då är det väl bara att göra det innan man skriver ut det?! :q :o

Sang-draxMedlem sedan juli 2002570 inlägg
#9

mangan, gör om ditt template så att det tar const T& så blir det ännu bättre.

Genererad på 397 ms · cache AV · v20260730165559-full.f96bc7eb