文字列回転整数(C#)

10121 ワード

using System;

using System.Collections.Generic;



namespace StrToInt_CS

{

    class Program

    {

        static void Main(string[] args)

        {

             string str = "";

             while (!String.IsNullOrEmpty(str = Console.ReadLine()))

             {

                 KeyValuePair<int, bool> ret = Program.StrToInt(str);

                 if (ret.Value)

                 {

                     Console.WriteLine("Number for {0} is {1}", str, ret.Key);

                 }

                 else

                 {

                     Console.WriteLine("The input {0} is invalid", str);

                 }

             }

        }



        public static KeyValuePair<int, bool> StrToInt(string s)

        {

            bool isMinus = false;

            bool isValid = false;

            int num = 0;

            int k = 0;



            // if contain leading space, then invalid

            if (s[k] == ' ')

            {

                new KeyValuePair<int, bool>(num, isValid);

            }



            // if contain operator

            if (s[k] == '-')

            {

                isMinus = true;

                k++;

            }

            if (k < s.Length && s[k] == '+')

            {

                isMinus = false;

                k++;

            } 



            int flag = isMinus ? -1 : 1;



            for (int i = k; i < s.Length; i++)

            {

                if (s[i] >= '0' && s[i] <= '9')

                {

                    try

                    {

                        // check number is not overflow

                        checked

                        {

                            num = num * 10 + flag * (s[i] - '0');

                        }

                    }

                    catch (Exception)

                    {

                        isValid = false;

                        break;

                    }

                }

                else

                {

                    break;

                }



                // if complete traverse the whole string, then is valid 

                if (i + 1 == s.Length) 

                {

                    isValid = true;

                } 

            }



            return new KeyValuePair<int,bool>( num, isValid);

        }

    }

}


Test cases:
null The input null is invalid ""The input ""is invalid ""The input ""is invalid
The input    is invalid 123 Number for 123 is 123 +123 Number for +123 is 123 -123 Number for -123 is -123 1a3333 The input 1a3333 is invalid +0 Number for +0 is 0 -0 Number for -0 is 0 2147483647 Number for 2147483647 is 2147483647 2147483648 The input 2147483648 is invalid -2147483648 Number for -2147483648 is -2147483648 -2147483649 The input -2147483649 is invalid + The input + is invalid - The input - is invalid++ The input++ is invalid __ The input __ is invalid -- The input -- is invalid