Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
09.12.2001, 17:52
Sccar



moinsen

gibt es eine funktion mit der ich feststellen kann, ob ein string nur zeichen enthält, die sich mit atoi oder atof in entsprechende variablen umwandeln lassen?

cu sccar

--

...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron}

zum Seitenanfang zum Seitenende Profil || Suche
001
09.12.2001, 18:41
Archangel



hmm, afaik nit, aber nimm doch die hier:

Quellcode:
int stringenthaeltnurzeichendieinatoigueltigsind(const char *string)
{
const char *s = string;

while(*s) {
if(!isdigit(*s) || *s != '-' || *s != '+')
  return 0;
  s++;
}

return 1;
}

für atof musst du dann noch den punkt hinzufügen..

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
002
09.12.2001, 18:51
Sccar



thx, ich werds mal testen. =) ich hatte mit was ähnlichem rumprobiert, bei mir hats aber net geklappt. =(

cu sccar

--

...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron}

zum Seitenanfang zum Seitenende Profil || Suche
003
09.12.2001, 21:13
Tron



@Archangel:
so klappt des net ganz, z.b. waere bei die 1-2-3-4-5-6-7-8 eine 'gueltige' zahl
ausserdem sind afaik fuehrende und folgende leerzeichen erlaubt

Quellcode:
bool isInteger(const char* pString)
{
..while (pString == ' ') ++pString; // fuehrende leerzeichen
..if (pString == '+' || pString == '-') ++pString; // + bzw. -
..while (pString >= '0' && pString <= '9') ++pString; // ziffern
..while (pString == ' ') ++pString; // nachfolgende leerzeichen
..return !pString; // falls string zu ende true, falls nicht false
}

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
004
10.12.2001, 09:22
Creeper



Also ich hatte das auch mal gefragt, musst einfach mal ein bisschen zurückblättern in diesem Forum.

--

Head Coder:Sudden-Impact

Listen to CKY you fuCKYrs http://www.ckymusic.com

zum Seitenanfang zum Seitenende Profil || Suche
005
11.12.2001, 17:51
Prefect



Nimm doch einfach strtol()...

Und da du ja wahrscheinlich keine Linux-Box parat hast:

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
006
11.12.2001, 18:16
Sccar



@prefect

Und da du ja wahrscheinlich keine Linux-Box parat hast:

was führt dich zu der vermutung?

sccar

--

...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron}

zum Seitenanfang zum Seitenende Profil || Suche
007
11.12.2001, 18:47
Archangel



das linux nich so weit verbreitet is wie windows ?
ich mein, wie viele forumuser benutzen hier tux ?

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
008
11.12.2001, 19:51
Mazze



Och, das würd ich nicht unterschätzen!
Ich kenn echt seehr viele Leute die Linux haben!

--

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

zum Seitenanfang zum Seitenende Profil || Suche
009
11.12.2001, 22:52
Tomz



etwas zu der oberen lösung. ich glaube, da muss man noch die ctype.h includen. für die isalpha()

--

...denn das atombrot wird nicht ruhen bis es den letzten erwischt hat...

zum Seitenanfang zum Seitenende Profil || Suche
010
12.12.2001, 15:08
Prefect



Naja, vielleicht hätte ich es anders formulieren sollen. Aber eine man-Page in den Thread reinzupasten ist ja nun wirklich kein Act, und die meisten Leute haben nunmal kein Linux. Und andernfalls hätte ich noch die Funktion strtol() erklären müssen...

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
011
12.12.2001, 16:02
Archangel



ähm, btw tron, mal ne frage:

wenn man bei deine funktion aufruft:

char *blub = strdup("123456");

if(IsInteger(blub))
...

wird dann nicht auch blub inkrementiert, dh zeigt blub nicht nacher auf das '\0' hinter '6' ?

kA wie das is, kann sein dass das nich zutrifft, da der zeiger const ist, aber heißt das nicht nur, dass man *pString, *(pString+1) ..., nicht verändern darf ?

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
012
12.12.2001, 16:57
Another1



uhm, da wird nix inkremenriert, da an die funktion nur ne kopie der pointer variablen übergeben wird.
nur Innerhalb der IsInteger func wird incrementiert, aber auch nur ne kopie.

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
013
12.12.2001, 17:01
Tron



@Archangel:
du hast da was mit pointern und const falsch verstaden...
an die funktion wird ein zeiger auf const char uebergeben; das heisst die chars sind const (koennen nicht veraendert werden)
der zeiger selbst wird wertuebergeben, das heisst man kann mit dem zeiger (NICHT mit dem worauf er zeigt) in der funktion machen was ich will, da man nur mit einer kopie des zeigers arbeite (NICHT mit einer kopie worauf er zeigt)
der zeiger selbst ist nicht const, also man kann veraendern worauf er zeigt (innerhalb der funktion!)
der zeiger ausserhalb bleibt davon unberuehrt

wenn du einen zeiger an eine funktion uebergeben willst, der veraendert werden soll, dann musst du einen zeiger auf diesen zeiger uebergeben (also char**)

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche