Atoi-Funktion:
In der Sprache C atoi
werden Funktionen zum Konvertieren von Zeichenfolgen in Ganzzahlen verwendet. Der Prototyp dieser Funktion lautet wie folgt:
int atoi(const char *str);
str
ist ein Zeiger auf die zu konvertierende Zeichenfolge. Beginnen Sie damit, so viele Leerzeichen wie nötig zu verwerfen, bis das erste Nicht-Leerzeichen gefunden wird. Ab diesem Zeichen sollte die Zeichenfolge mit einem numerischen Zeichen beginnen und kann ein optionales Symbol (+
oder-
) gefolgt von einem numerischen Zeichen enthalten.atoi
Die Funktion liest,str
bis sie auf ein nicht numerisches Zeichen oder das Ende der Zeichenfolge stößt\0
.- Wenn
str
es sich um eine gültige Ganzzahlzeichenfolge handelt,atoi
gibt die Funktion den entsprechenden Ganzzahlwert zurück. Wenn esstr
sich nicht um eine gültige Ganzzahlzeichenfolge handelt,atoi
ist das Verhalten der Funktion undefiniert.
Hier ist ein atoi
einfaches Beispiel für die Verwendung einer Funktion:
#include <stdio.h>
#include <stdlib.h>
int main() {
char str1[] = "42";
char str2[] = "-123";
char str3[] = "10abc";
int num1 = atoi(str1);
int num2 = atoi(str2);
int num3 = atoi(str3);
printf("num1: %d\n", num1); // 输出:num1: 42
printf("num2: %d\n", num2); // 输出:num2: -123
printf("num3: %d\n", num3); // 输出:num3: 10
return 0;
}
In diesem Beispiel atoi
konvertiert die Funktion erfolgreich die Zeichenfolgen "42"
, "-123"
und "10abc"
in die Ganzzahlen 42, -123 und 10.
Es ist zu beachten, dass, da atoi
das Verhalten der Funktion bei einem Konvertierungsfehler undefiniert ist, in der tatsächlichen Verwendung normalerweise die Verwendung von Funktionen wie oder empfohlen wird, strtol
da sscanf
diese Funktionen bessere Fehlerbehandlungsmechanismen bieten.
Simulieren Sie die Implementierung von atoi:
#include<stdio.h>
#include<assert.h>
#include<ctype.h>
#include <limits.h>
int my_atoi(const char* str)
{
assert(str);
if (*str == '\0')
{
return 0;
}
while (isspace(*str))
{
str++;
}
int flag = 1;
if (*str == '+')
{
flag = 1;
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
long long ret = 0;
while (*str != '\0')
{
if (isdigit(*str))
{
ret = ret * 10 + flag * (*str - '0');//减去字符0,才是数字0
if (ret > INT_MAX || ret < INT_MIN)
return 0;
}
str++;
}
return (int)ret;//强制类型转化为int(函数的返回值是int)
}
int main()
{
char s[100] = " 43";
printf("%d\n", my_atoi(s));
return 0;
}