2-String to Integer (atoi)

实现atoi这个函数, public int atoi(String str),传入字符串str可以返回整数,请仔细考虑一下字符串的各种情况!

String to Integer: Case分析

  1. 正常数字

Sample:”123”,”0”,”1” ,"-1"

  1. 普通特殊字符:

Sample: "000","001","-001"

  1. 正负号问题
    1. 含有正负号

Sample: " -123", " +123", "-123", "+123","--123","++123","  -004500"

  1. 空格问题
    1. 含有空格

Sample: " 123","123 123","123 "

  1. 包含特殊符号
    1. 字母,其它特殊符号

Sample: "*123","*abc","~123","123~", "a123","12a3", "12+3","12-3"

  1. 空的字符串

Sample: string.Empty,null,""," "

  1. 边界问题
    1. 正常或者超过Int32最大和最小值,输出最大 或最小Int32

Sample: "-2147483648","2147483647"

Sample: "-214748364800","214748364700"

Snapshot:

                       

Source Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//http://www.cnblogs.com/binyao/p/5026406.html

namespace StringtoInteger
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = { string.Empty,null,""," ",
                            "0","1","123","000","001","-1","-001",
                            " 123","123 123","123 ",
                            " -123", " +123",
                            "-123", "+123","--123","++123","  -004500",
                            "*123","*abc","~123","123~",
                            "a123","12a3",
                            "12+3","12-3",
                            "-2147483648","2147483647",
                            "-214748364800","214748364700" };
            StringtoInteger(str);
        }

        public static void StringtoInteger(string[] str)
        {            
            Console.WriteLine("StringtoInteger Result is:");
            foreach (string s in str)
            {
                Console.Write("Test Data:{0}", s);
                Console.WriteLine("  Result:{0}", StringtoInteger(s));
            }
        }

        public static int StringtoInteger(string str)
        {
            int sign = 0;
            int i = 0;
            int result = 0;

            if (string.IsNullOrEmpty(str))
            {
                return result;
            }

            while (i < str.Length && ((str[i] >= '0' && str[i] <= '9') || str[i] == ' ' || str[i] == '-' || str[i] == '+'))
            {
                if (str[i] == ' ' && (result == 0 && sign == 0))
                {
                    i++;
                }
                else if (str[i] == '+' && (result == 0 && sign == 0))
                {
                    sign = 1;
                    i++;
                }
                else if (str[i] == '-' && (result == 0 && sign == 0))
                {
                    sign = -1;
                    i++;
                }
                else if (str[i] >= '0' && str[i] <= '9')
                {
                    if (result > (int.MaxValue - (str[i] - '0')) / 10)
                    {
                        if (sign == 0 || sign == 1)
                            return int.MaxValue;
                        return int.MinValue;
                    }

                    result = result * 10 + str[i] - '0';
                    i++;
                }
                else
                {
                    if (sign == 0)
                        return result;
                    return result * sign;
                }
            }

            if (sign == 0)
                return result;
            return result * sign;
        }
    }
}
View Code
原文地址:https://www.cnblogs.com/binyao/p/5026406.html