atoi() mit Check-Funktion (C++)

Hallo,
gibt es sowas wie atoi() das vorher den String durchsucht ob wirklich nur "Zahlen" enthalten sind, oder muß ich mir die Funktion selber schreiben?
 
die frage ist wohl was du als funktionalität haben willst, sprich was soll denn atoi als returnwert liefern falls der eingabestring keine zahl ist ?

bevor du jedenfalls lange rumsuchst nach einer solchen funktion würd ich an deiner stelle fix eine selbst schreiben.
so auf anhieb fällt mir da sowas ein:

Code:
int atoi_withcheck(char *string)
{
size_t i;
for(i=0;i<strlen(string);i++)
{
 if((string[i]<0x30) && (string[i] >0x39))
  return(0); // Nullwert zurückgeben wenn ein Zeichen keine Ziffer ist.
}
 return(atoi(string));
}

wenn die zahl auch einen "." oder "," enthalten darf musste das natürlich dementsprechend anpassen.
 
Danke für die Lösung. An sowas hab ich auch schon gedacht. Wollte aber wissen ob es bereits etwas Ähnliches gibt. Ansonsten greif ich gerne auf deine Lösung zurück*g
 
Hmm, ich hab mal so was geschrieben:
Code:
/*
 s2i

 Konvertiert einen String mit (lateinischen) Ziffern in einen Integer, aehnlich atoi().

 Benoetigt die <string.h> fuer strlen() und die <math.h> fuer pow()
 includiert.

 Nimmt einen String der (lateinische) Ziffern enthaelt.

 Gibt einen Integer, der den Wert enthaelt den der String
 darstellt zurueck.

*/
unsigned int s2i (char *string)
 {
	int i;
	int ii;
	int x;
	x = 0;

	for (i = (strlen(string) - 1), ii = 0; i >= 0; i--, ii++) {
	  if (string[i] <= 57 && string[i] >= 48) {
	    x += (((int) pow((double) 10, (double)ii)) * (string[i] - 48));
	  }
	  else {
	    printf(\"Could not process non numeric character!\n\");
	    exit(0);
	  }
	}

	return(x);
 }
Das Problem ist halt was macht man bei einem Fehler, hier steig ich halt komplett aus dem Progamm aus, aber ob das immer gewünscht ist? Andererseits ist es unflexibel es über einen Return-Wert zu machen, weil was ist wenn der String "0" ist und die Zahl damit tatsächlich 0? Man könnte höchstens die Integer-Variable in die der numerische Wert den der String darstellt kommen bzw. einen Pointer auf eben jene mit an die Funktion übergeben und diese direkt in die Variable den Wert den der String darstellt schreiben lassen, als Return-Wert dann bei Erfolg irgenwas was TRUE evaluiert (1 z. B. *g*) und bei Misserfolg (non numeric char im String) halt FALSE, also 0 zurück geben...
Oder etwas grösseres als einen Integer zurückgeben und den Bytes nach dem Integer das TRUE / FALSE aufbewahren, aber da kommt man dann schnell durcheinnander IMHO...
 
Wenn Deine Werte feststehen ..kannst du ganze auch in eine switch Anweisung packen..und dann mittels break ggf aussteigen
 
Zurück
Oben