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 ?

             }

         }

    }

また、部分文字列メソッドなしでどのように行うことができますか?

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

使用している方法はあまり良くありません。まず、位置ではなく長さ関数に1と2をフィードしているため、bは常にaよりも大きくなります。したがって、たとえば、数値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ステートメントは1回だけ実行されます。一般に、可能な場合はifステートメントを使用します。これは、whileループが無期限に実行される可能性があるためです(条件が満たされない状態になる可能性があり、永久に何度もループするため)。

于 2013-01-02T12:29:48.827 に答える
0

文字列内のインデックス i を持つ要素が要素 i-1 よりも大きいかどうかを確認できます (インデックスが 1 で始まる各要素に対して)。

于 2013-01-02T12:24:52.147 に答える
0

この LINQ チェーンを使用できます。asc1asc2はブール値で、最初の値は true、2 番目の値は false になります。チェーンが行うことは、インデックスがゼロに等しいか、インデックスがゼロより大きいが前のものよりも大きい文字の量が文字列の長さと等しいかどうかを確認することです。文字列が数字のみであると仮定すると、それらの 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 に答える