Languages
[Edit]
EN

C#/.NET - parse number algorithm (atoi)

9 points
Created by:
Kate_C
2854

1. Unsigned number example

class Parser
{
	public static int parseInt(string text)
	{
		if (text.Length > 0)
		{
			int value = 0;
			int total = 1;

			for (int i = text.Length - 1; i > -1; i -= 1)
			{
				char entry = text[i];

				if (entry < '0' || entry > '9')
					throw new FormatException("Incorrect number format.");

				value += (entry - '0') * total;
				total *= 10;
			}

			return value;
		}
		else
			throw new FormatException("Incorrect number format.");
	}
}

Example:

string text = "123";
int value = Parser.parseInt(text);
Console.WriteLine(value);

Output:

123

2. Signed number example

class Parser
{
	public static int parseInt(string text)
	{
		if (text.Length > 0)
		{
			int value = 0;
			int total = 1;

			Action<char> action = (entry) =>
			{
				if (entry < '0' || entry > '9')
					throw new FormatException("Incorrect number format.");

				value += (entry - '0') * total;
			};

			for (int i = text.Length - 1; i > 0; i -= 1)
			{
				action.Invoke(text[i]);

				total *= 10;
			}

			{
				char entry = text[0];

				switch (entry)
				{
					case '+':
						return +value;

					case '-':
						return -value;

					default:
						action.Invoke(entry);
						
						return value;
				}
			}
		}
		else
			throw new FormatException("Incorrect number format.");
	}
}

Example:

string text = "123";
int value = Parser.parseInt(text);
Console.WriteLine(value);

Output:

123
Hey 👋
Would you like to know what we do?
  • Dirask is a friendly IT community for learners, professionals and hobbyists to share their knowledge and help each other in extraordinary easy way.
  • We welcome everyone,
    no matter what the experience,
    no matter how basic the question is,
    this community will help you.