Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » zahl aus string

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
30.08.2004, 20:35 Uhr
~Carpocalypse
Gast


Hi,

ich habe einen char vorliegen der z.B. folgenden Inhalt hat "abc123" wie bekomme ich die Zahl "123" aus dem char? währe super wenn dazu jemand eine lösung hätte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.08.2004, 20:51 Uhr
stephanw
localhorst


Wenn Du den Teilstring mit der Zahl extrahieren kannst, kannst Du auf die Zeichenkette (die jetzt die Zahl enthält) mit atoi() oder atof() aus der stdlib.h eine Zahl (int oder float) erhalten. In jedem Fall musst Du die Zahl extrahieren, wie, das hängt von den Gegebenheiten ab.
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 30.08.2004 um 20:51 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.08.2004, 22:15 Uhr
Pablo
Supertux
(Operator)



C++:
int n;
const char* x = "abc123";
sscanf(x, "abc%d", &n);


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.08.2004, 22:18 Uhr
Lensflare



ich würde dafür die folgende funktion schreiben:

C++:
int zahl_aus_string(char s[])
{
  int a = 0; //Position im String
  int r = 0;
  
  while((s[a]>=48 && s[a]<=57) || r==0)
  {
    a += 1; //nächstes Zeichen
    if(s[a]>=48 && s[a]<=57) r = 1; //r nimmt Wert 1 an, wenn das Zeichen eine Ziffer ist.
  }
  a -= 1;

  int e = 0;
  int m = 1;
  
  while(s[a]>=48 && s[a]<=57)
  {
    e += (s[a]-48) * m;
    m *= 10; //Multiplikator für nächste Stelle
    a -= 1; //ein Zeichen zurück (=eine Stelle vor)
  }
  
  return e;
}



Es wird eine zeichenkette übergeben und eine zahl vom typ int zurückgegeben.

Dabei merkt sich die funktion, wo die erste zahl (nicht ziffer) im string aufhört und verarbeitet rückwärts alle ziffern bis ein zeichen kommt, das keine ziffer ist.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 30.08.2004 um 22:21 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.08.2004, 23:27 Uhr
~Carpocalypse
Gast


super ich danke euch, genau das was ich suche
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.08.2004, 23:44 Uhr
virtual
Sexiest Bit alive
(Operator)


@lensflare
Was ich bei Problemstellungen dierser Art nie verstehen werde ist die Verwendung von Zahlen wie 48 an Stelle von '0' und 57 an Stelle von '9' usw. Kannst Du mir bitte mal erklären, warum du es so machst? Du bist nicht der einzige, der es so macht und ich würde gerne mal wissen, wie es wohl kommt, daß Du dir zwar '0' denkst, aber 48 schreibst???

Im gegenzug erläre ich Dir dann auch gerne, warum Du es nicht so machen solltest.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.08.2004, 07:50 Uhr
stephanw
localhorst



Zitat:

C++:
int n;
const char* x = "abc123";
sscanf(x, "abc%d", &n);

Hab ich wieder mal den Wald vor lauter Bäumen nicht gesehen, mit sscanf gehts natürlich auch .
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.08.2004, 08:37 Uhr
Pablo
Supertux
(Operator)


Statt solche Sachen zu schreiben wie

C++:
while(s[a] >= '0' && s[a]<='9')...



benutzt man


C++:
while(isdigit(s[a]))...



Hier, es gibt ganz nützliche Funktionen:

Zitat von man isdigit:

#include <ctype.h>

int isalnum(int c);
int isalpha(int c);
int isascii(int c);
int isblank(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);



--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 31.08.2004 um 08:38 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
31.08.2004, 11:28 Uhr
(un)wissender
Niveauwart


@Pablo
Gut!

@virtual
Zu 48 und '0': eigentlich haste Recht, '0' ist deutlich besser, allerdings wird sich die ASCII-Zuordnung vermutlich nicht ändern, also ist es nur schlechter Stil.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
31.08.2004, 13:29 Uhr
Lensflare



@ virtual:

ich habs irgendwie unbewusst gemacht, aber im nachhinein habe ich mir auch überlegt, wieso ich nicht einfach '0' und '9' schreibe egal
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: