C#-检查输入的字符串是否为整数

时间:2018-11-18 16:38:16

标签: c# console-application

我想检查输入的字符串是否为整数

  
    

12 =正确

         

+12 =真

         

-5 =正确

         

4.4 = False
    4as = False

  

我使用Admin做到了,但是我想要使用ASCII而不使用int.TryParse

int.TryParse

6 个答案:

答案 0 :(得分:2)

您还可以使用正则表达式:

var regex = new Regex(@"^[-+]?\d+$");
var str = Console.ReadLine();
if (regex.IsMatch(str))
{
    Console.WriteLine($"{str} is a number!");
}

答案 1 :(得分:0)

为什么不使用:

if(intString[0] == '+' || intString[0] == '-') intString = intString.Substring(1, intString.Length - 1);
bool isNumber = intString.All(char.IsDigit);

答案 2 :(得分:0)

检查第一个字符是否为-| + |位,检查其余字符是否为数字

for (int i = 0; i < str.Length; i++)
{
    var c = str[i];
    if (i == 0)
    {
        if (!(c == '+' || c == '-' || char.IsDigit(c)) {
            return false;
        }
    }

    if (!char.IsDigit(c)) return false;
}
return true;

答案 3 :(得分:0)

不确定为什么不想使用int.TryParse,但是以下代码应该这样做:

static bool IsValidInteger(string s)
{
    var leadingSignSeen = false;
    var digitSeen = false;
    var toParse = s.Trim();

    foreach (var c in toParse)
    {
        if (c ==  ' ')
        {
            if (digitSeen)
                return false;
        }
        else if (c == '+' || c == '-')
        {
            if (leadingSignSeen || digitSeen)
                return false;

            leadingSignSeen = true;
        }
        else if (!char.IsDigit(c))
            return false;
        else
        {
            digitSeen = true;
        }
    }

    return true;
}

这将接受带有前导符号以及前导和尾随空格的任何整数。前导符号和数字之间的空格也是可以接受的。

答案 4 :(得分:0)

仅供参考:您可以重构代码以简化代码,以实现完全相同的功能输出:

void Main()
{
    int result;
    Console.Write("Enter a Number : ");
    while (!int.TryParse(Console.ReadLine(), out result))
    {
        Console.WriteLine("Please Enter Numbers Only.");
        Console.Write("Enter a Number : ");
    }
    Console.WriteLine($"Entered String: {result} is a Number!");
    Console.ReadKey();
}

如果您有充分的理由不使用int.TryParse(例如,它缺少某些功能,或者这是要求您编写自己的练习),则可以使用上述替换{{1} },并调用int.TryParse,并假设使用以下签名(或将类型IsNumericCustom更改为您需要处理的任何数据类型)。

int

或者,如果您只关心值是数字而不是解析后的值:

public bool IsNumericCustom(string input, out int output)
{
    //...
}

对于void Main() { string result; Console.Write("Enter a Number : "); //while (!int.TryParse((result = Console.ReadLine()), out _)) while (!IsNumericCustom((result = Console.ReadLine())) { Console.WriteLine("Please Enter Numbers Only."); Console.Write("Enter a Number : "); } Console.WriteLine($"Entered String: {result} is a Number!"); Console.ReadKey(); } public bool IsNumericCustom(string input) { //... } 中的逻辑,这实际上取决于您希望实现的目标/为什么IsNumericCustom / int.TryParse等不合适。这是几个实现(使用不同的函数名)。

decimal.TryParse

答案 5 :(得分:0)

根据您的要求,您似乎想要使用ASCII代码来断言输入的字符串是否为数字。

这是我想出的代码:

 string str;
    var index = 1;
    int strintoA = 0;
    bool isNegative = false;

    //ASCII list of numbers and signs
    List<int> allowedValues = new List<int> { 43, 45, 48, 49, 50, 51, 52, 53, 54, 55, 56, 
    57 };
    bool flag = false;

    while (!flag)
    {
        Console.WriteLine("Enter a Number : ");

        str = Console.ReadLine();

        if (str.Count(item => allowedValues.Contains((int)item)) == str.Count())
        {
            foreach (var item in str.Reverse())
            {               
                if (item != 43 && item != 45)
                {
                    strintoA += index * (item - 48);
                    index = index * 10;
                }
                else if(item == 45)
                {
                    isNegative = true;
                }
            }
            if(isNegative)
            {
                strintoA *= -1;
            }

            Console.WriteLine("Entered String: " + str + " is a Number!");
            flag = true;
        }
        else
        {
            Console.WriteLine("Please Enter Numbers Only.");
        }
    }
    Console.ReadKey();
}

allowedValues列表包含数字值和允许的符号(+和-)的ASCII表示形式。 foreach循环将重新生成插入的int值。

希望有帮助。