Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
18.01.2002, 15:02
Cyberbird



Hi Leutz
Wie kann ich in C++ 2 int-Variablen in einen string stecken? D.h ich rechne mir eine Zahl aus und diese Zahl möchte ich nach her in einen String stecken.
int i = 12 das wird zu einem string s = 1 2 \0
greetz
Cyberbird

--

Ein einziges Blättchen Erfahrung ist mehr wert, alls ein ganzer Baum guter Ratschläge.


Dieser Beitrag wurde am 18.01.2002 um 15:37 von Cyberbird bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
18.01.2002, 16:20
Zeeke



#include <stdio.h>
#include <stdlib.h>

void main() {
char szBlub[15];
int iZahl1 = 5, iZahl2 = 6, iZahl3;
iZahl3 = iZahl1 + iZahl2;
itoa(iZahl3, szBlub, 10);
printf("%s", szBlub);
getchar();
}

--


Dieser Beitrag wurde am 18.01.2002 um 16:20 von ZeekeGF bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
18.01.2002, 16:35
Cyberbird



thx Zeeke! Ich habs zwar etwas anders gemeint aber ich konnt deinen Quellcode so umformen, wie ich es will.
greetz
Cyberbird

--

Ein einziges Blättchen Erfahrung ist mehr wert, alls ein ganzer Baum guter Ratschläge.

zum Seitenanfang zum Seitenende Profil || Suche
003
18.01.2002, 16:57
Kriz



Dafür hat die SRTL keine Funktion parat, nur für Strings nach Zahlen...

Eventuell hilft das hier:

Quellcode:#include <math.h>
#include <string.h>

int Int2Str(int wert, char* zielstring)
{
....if(!zielstring) return 0;
....int temp = wert,
........counter = 0;
....char* s = 0;
....while(static_cast<int>(temp/=10)) counter++;
....s = new char[counter+1];
....for(int i=counter; i>=0; i--)
....{
........s[ i ] = static_cast<char>(static_cast<int>((wert%10)+48));
........wert /= 10;
....}
....s[counter+1] = '\0';
....strcpy(zielstring, s);
....delete [] s;
....return 1;
}

Zu beachten ist nur, daß der übergebene Zielstring genügend Zeichenkapazität besitzt, sonst gibbet Errors. Dafür mußt du also schon selber sorgen!

Außerdem behandelt die Funktion nur positive Zahlen!

EDIT

Öhm, wieso finde ich in der C/C++ Ref nix über itoa() ???

EDIt 2

Hm, da gibbet nur M$ spezifisches _itoa() usw. Scheint aber kein ANSI-Standard zu sein, oder?

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 18.01.2002 um 17:02 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
18.01.2002, 19:29




(none)

--

zum Seitenanfang zum Seitenende Profil || Suche
005
18.01.2002, 19:45
Cyberbird



Kann es sein, dass es Probleme gibt bei diesem Code:

string txt;
cin >> txt;
int l = txt.lenght();
int i;
char ch[100];
for(k=0; k<l; k++)
{
ich = txt[k];
itoa(i, ch, 100);
}
return ch;

Ich bekomme (wenn txt[k] = A) als ch = A zurück!
greetz
Arno

--

Ein einziges Blättchen Erfahrung ist mehr wert, alls ein ganzer Baum guter Ratschläge.


Dieser Beitrag wurde am 18.01.2002 um 20:21 von Cyberbird bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
19.01.2002, 00:00
Kriz



Der dritte Param bei itoa() ist die Radix-Angabe, also die Zahlenbasis. Die geht btw. nur von 2 bis 36. Also das 100er Zahlensystem kenne ich nicht :) Da muß ne 10 stehn für Dezimal. Und wo kommt das ich her bei ich = txt[k] ?

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
007
19.01.2002, 13:16
Cyberbird



Ah deshalb die Zahl! Das ich sollte eigentlich i heißen!
Ich habe noch eine kleine Frage: kann ich eigentlich beim return einer funktion eigentlich auch bei char die stellen 0 und 1 zurückgeben?
greetz
Cyberbird

--

Ein einziges Blättchen Erfahrung ist mehr wert, alls ein ganzer Baum guter Ratschläge.

zum Seitenanfang zum Seitenende Profil || Suche
008
19.01.2002, 14:12
Mazze



Sowas?
Quellcode:
int main()
{
char* x = charszurueck("hallo");
std::cout << x;

return 0;
}

char* charszurueck(char* a)
{
char* sz;
sprintf(sz, "%c%c",a[0], a[1]);

return sz;
}

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
009
19.01.2002, 15:31
Cyberbird



Noch ne Frage gibt es so ne art atoi-Funktion auch für chars, die nicht const sind?

--

Ein einziges Blättchen Erfahrung ist mehr wert, alls ein ganzer Baum guter Ratschläge.

zum Seitenanfang zum Seitenende Profil || Suche
010
20.01.2002, 01:39
Kriz



Die müssen (oder besser gesagt sollten) const sein, damit der Zeiger auf char, der ja auf den Stringanfang zeigt, von der aufgerufenen Funktion nicht verändert werden kann.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
011
20.01.2002, 15:40
Prefect



Das mit dem const ist ein non-Issue. Pointers von nicht-const auf const zu ändern ist logischerweise gar kein Problem. Nur andersrum gibt's Ärger.

Die noch intelligentere Lösung ist übrigens strtol(), weil sie besseres Fehlerhandling hat:

Zitat:

SYNOPSIS
#include <stdlib.h>

long int strtol(const char *nptr, char **endptr, int base);

DESCRIPTION
The strtol() function converts the string in nptr to a long integer value according to the given base, which must be
between 2 and 36 inclusive, or be the special value 0.

The string must begin with an arbitrary amount of white space (as determined by isspace(3)) followed by a single optional
`+' or `-' sign. If base is zero or 16, the string may then include a `0x' prefix, and the number will be read in base
16; otherwise, a zero base is taken as 10 (decimal) unless the next character is `0', in which case it is taken as 8
(octal).

The remainder of the string is converted to a long int value in the obvious manner, stopping at the first character which
is not a valid digit in the given base. (In bases above 10, the letter `A' in either upper or lower case represents 10,
`B' represents 11, and so forth, with `Z' representing 35.)

If endptr is not NULL, strtol() stores the address of the first invalid character in *endptr. If there were no digits at
all, strtol() stores the original value of nptr in *endptr (and returns 0). In particular, if *nptr is not `\0' but
**endptr is `\0' on return, the entire string is valid.

RETURN VALUE
The strtol() function returns the result of the conversion, unless the value would underflow or overflow. If an under­
flow occurs, strtol() returns LONG_MIN. If an overflow occurs, strtol() returns LONG_MAX. In both cases, errno is set
to ERANGE.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
012
20.01.2002, 15:55
Kriz



Jo, diese Funktionen rocken. Aber erklär mal einem "Ungläubigen", was die Sequenz char** bedeutet bzw. was sich dahinter verbirgt und wie man es noch schreiben kann :)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche