0

我如何检查数字是否在增加?123456-真 423659-假

我试试

while (newNumber != 0)
         {

             string a = newNumber.ToString().Substring(0, 1);
             string b = newNumber.ToString().Substring(0, 2);

             input1 = Convert.ToInt32(a);
             input2 = Convert.ToInt32(b);

             if (input1 < input2)
             {
                 ////how do i increase substring a&b +1 ?

             }

         }

    }

另外,如果没有 substring 方法,我该怎么做?

4

4 回答 4

2

无需在 和 之间来回转换string数字int。在 C# 中,字符串可以作为字符数组进行枚举,并且字符之间是可比较的:

bool IsIncreasing(int number)
{
    string text = number.ToString();
    char previous = '0';

    foreach(char c in text)
    {
        if(c <= previous)
            return false;
        previous = c;
    }

    return true;
}
于 2013-01-02T12:35:00.707 回答
1

您使用的方法不是一个很好的方法。首先,b 总是大于 a,因为您将 1 和 2 输入到长度函数中,而不是位置。因此,例如,如果您取数字 12345,则 a 为 1,b 为 12。另外,Substring 方法是在调用时计算的,因此如果不再次调用 Substring,则定义后无法修改参数。可以这样想:如果您将方法的结果分配给变量,则该方法必须计算该结果,因此如果您想要不同的结果,则必须再次计算它。但是,您根本不需要使用 Substring 方法。在 C# 中,字符串可以通过索引来访问,所以你可以说myString[0]对于第一个元素(请记住,C# 中的索引是 0 索引,所以第一项是索引 0)。要执行您正在检查的操作,您可以使用 for 循环,如下所示:

if (newNumber != 0)
     {

         string a = newNumber.ToString();

         for(int i = 1; i < a.Length; i++)
         {
             int input1 = Convert.ToInt32(a[i-1]);
             int input2 = Convert.ToInt32(a[i]);

             if (input1 >= input2) //Note the reversed condition
             {
                 return false; //Gives the false result

             }
         }
         return true; //Computation finished, so the number is increasing
     }

}

如果我正确理解了您的问题,此方法应该很快,并且几乎可以完全按照您的意愿进行。另外,我不确定你为什么使用while循环,因为你没有在循环体中更改“newNumber”,程序将在循环中计算,直到有东西停止它。您应该使用 if 语句。While 循环将一遍又一遍地循环遍历主体,在每次开始计算之前测试条件,而 if 语句只运行一次。一般来说,尽可能使用 if 语句,因为 while 循环有可能无限期地运行(因为你可能会进入一个条件永远不会满足的状态,它只会永远循环下去)。

于 2013-01-02T12:29:48.827 回答
0

您可以查看字符串中索引为 i 的元素是否大于元素 i-1(对于每个索引以 1 开头的元素)。

于 2013-01-02T12:24:52.147 回答
0

您可以使用此 LINQ 链。asc1并且asc2是布尔值,第一个为真,第二个为假。链所做的是检查索引等于零或索引大于零但仍大于前一个的字符数量是否等于字符串的长度。它不解析字符,因为假设字符串只是数字,它们的 ASCII 值将在 30..39 范围内,因此在检查中仍然有效。

var s1 = "123456";
var s2 = "423659";
var asc1 = s1.Where((c, i) => i == 0 || c > s1[i - 1]).Count() == s1.Length;
var asc2 = s2.Where((c, i) => i == 0 || c > s2[i - 1]).Count() == s2.Length;
于 2013-01-02T12:25:01.377 回答