【问题标题】:Get single digits from a larger number从更大的数字中获取个位数
【发布时间】:2015-02-11 23:31:42
【问题描述】:

我有一个问题,但我似乎没有做对,有没有办法从一个写在文本框中的较大数字中获取单个数字? 例如,我在一个文本框中输入数字123456789,我想将这个大数字中包含的所有数字都包含在 9 个不同的整数上,比如整数,如下所示:

int firstNumber;
int secondNumber;
int thirdNumber;
int fourthNumber;
int fifthNumber;
int sixNumber;
int seventhNumber;
int eighthNumber;
int ninethNumber;   

是否有一个 TextBox 属性可以做到这一点,还是我必须为其编写算法?

【问题讨论】:

    标签: c# algorithm int


    【解决方案1】:

    您可以简单地遍历 TextBox 字符串的每个字符并将其输入到 int 数组中。使用数组比使用单个变量要好得多。

    string text = "123456789"; //Set to TextBox text
    int[] numbers = new int[text.Length]; //Create array of ints
    for (int i = 0; i < text.Length; i++)
    {
        //Parse each character to an integer
        numbers[i] = Int32.Parse(text[i].ToString());
    }
    

    如果您不熟悉,您可以查看this 数组教程和循环。

    使用此代码,您现在可以通过以下方式检索每个数字:

    int firstNumber = numbers[0];
    int secondNumber = numbers[1];
    etc, etc
    

    【讨论】:

    • 是的,我正在考虑类似的事情,但由于我在数组和循环方面有点生疏,所以我花费的时间比它应该的要多。我将阅读该教程。非常感谢!!!
    【解决方案2】:
    string input = "123456789"; 
    
    var nums = 
    (from i in input
    select int.Parse(i.ToString())).ToList();
    

    【讨论】:

    • 您可以随时使用Console.WriteLine(string.Join(Environment.NewLine, nums));打印数字
    • @AD.Net 我撤回了我的投票,但您可能需要添加一些其他信息。 OP 似乎对数组不熟悉,可能不知道这段代码是如何工作的,也不知道如何访问nums 中的每个元素。
    • 感谢您的回答!我并没有在寻找实际的代码,因为我总是试图自己解决这些问题,但这花了我太多时间。我在数组方面有点疲惫,但这是一个非常有用的提醒。由于声望不够,我无法投票,但我非常感谢你们的帮助!
    【解决方案3】:

    嗯...TextBox 包含 text:它有一个 Text 属性,该属性返回一个表示文本框内容的字符串。 C# 字符串是IEnumerable&lt;char&gt;:枚举字符串中的字符应该很简单。给定char c,您可以通过评估c-'0' 将其整数值作为十进制数字。如果结果在域 0 到 10 之间,则为十进制数字。

    你可以这样说:

    public static IEnumerable<int> TextDigits( this TextBox instance )
    {
      foreach( char c in instance.Text )
      {
        int d = c - '0' ;'
        if ( d >= 0 && d <= 9 ) yield return value ;
      }
    }
    

    或者是这样的:

    public static IEnumerable<int> TextDigits( this TextBox instance )
    {
      int value = int.Parse(instance.Text) ;
      if ( value == 0 ) { yield return 0 ; }
      while ( value != 0 )
      {
        int d = value % 10 ;
        value /= 10 ;
        yield return d ;
      }
    }
    

    或者你可以这样说

    TextBox tb ;
    int[] digits = tb
                   .Select( c => c - '0' )
                   .Where( c => c >= 0 && c <= 9 )
                   .ToArray()
                   ;
    

    有...正如他们所说...从这里到达那里的方式不止一种。

    【讨论】:

    • 谢谢!第二个似乎更适合我的需要。我很感激你花时间,不仅回答了我的问题,还给了我三种方法来做我需要的事情。谢谢!如果这个问题太明显了,对不起,是我为新手付出的代价。
    猜你喜欢
    • 2020-12-08
    • 2021-03-24
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多