Atoi-Funktion und ihre Simulationsimplementierung

 Die Funktionsdeklaration und Funktionen von atoi lauten wie folgt:

Die Funktion dieser Funktion besteht darin,eine Zeichenfolge in eine Ganzzahl umzuwandeln. Was genau macht sie also?

Schauen wir uns zunächst einige Beispiele an:

 Wenn vor Zahlen in der Zeichenfolge Leerzeichen stehen, werden die Leerzeichen entfernt.

 Wenn sich in der Mitte der Zeichenfolge Buchstaben befinden, werden nur die Zahlen vor den Buchstaben konvertiert.

 Wenn die Zeichenfolgenzahl den Bereich der maximalen Ganzzahldarstellung überschreitet, wird der maximale Ganzzahlwert zurückgegeben (dasselbe gilt für den Mindestwert).

Es gibt einen Maximalwert, der in eine ganze Zahl umgewandelt wird

 Wenn das erste Zeichen nach dem Leerzeichen ein Buchstabe ist, wird 0 zurückgegeben.

Am Anfang war es ein illegaler Charakter

Daher müssen wir bei der Simulation der Implementierung die oben genannten illegalen Eingabesituationen berücksichtigen:

1. Leere Zeichenfolge

2. Leerzeichen

3. Verarbeiten Sie das +-Zeichen

4. Zu großer Wert und zu kleiner Wert

5. In der Mitte der Zahlen befinden sich weitere Zeichen

Implementierung der Atoi-Simulation:

#include <stdio.h>
#include <ctype.h>
#include <assert.h>
#include <stdlib.h>
enum State
{
	VALID,
	INVALID
}sta = INVALID;//默认设置为非法
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 r = 0;
	while (*str)
	{
		if(isdigit(*str))
		{
			r = r * 10 + flag*((long long)*str - '0');
			if (r > INT_MAX || r < INT_MIN)
			{
				if (flag == 1)
					return INT_MAX;
				else
					return INT_MIN;
			}
			str++;
		}
		else
		{
			return (int)r;
		}
	}
	sta = VALID;
	return (int)r;

}

int main()
{
	char arr[] = "   12ab34";//加几个空格
	int ret = my_atoi(arr);
	if (sta == VALID)
		printf("合法的转换:%d\n", ret);
	else
		printf("非法的转换:%d\n", ret);

	return 0;
}

Während des Simulationsimplementierungsprozesses haben wir den Aufzählungstyp State definiert, um Mehrdeutigkeiten zu vermeiden. Wenn beispielsweise eine leere Zeichenfolge an my_atoi übergeben wird, gibt die Funktion 0 zurück. Wenn gleichzeitig die Zeichenfolge „0“ an my_atoi übergeben wird, wird die Die Funktion sollte auch 0 zurückgeben, was unweigerlich zu Mehrdeutigkeiten führt. Daher wird ein solcher Aufzählungstyp definiert. Eine Aufzählungsvariable sta wird unter Verwendung des Aufzählungstyps definiert. Der Anfangswert ist UNGÜLTIG. Wenn die Funktion normal zurückkehrt, wird sta auf GÜLTIG gesetzt. , und letztendlich wird die Bedeutung anhand des Wertes von sta! differenziert.

Supongo que te gusta

Origin blog.csdn.net/qq_48460693/article/details/133803494
Recomendado
Clasificación