Einführung: C-Sprache – Atoi-Funktion

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,  strbis 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 es  str 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;
}

Supongo que te gusta

Origin blog.csdn.net/m0_73800602/article/details/133273856
Recomendado
Clasificación