文字列回転整数(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