0

次の配列があります。

public string reArrange(string s)
{
    char[] array = s.ToCharArray();
    int length = array.Length;
    char[] arranged = new char[length];

    for (int i = 0; i < length; i++)
    {
        int newposition = length - i;
        arranged[newposition] = array[i];
    }

    return new string(arranged);
}

しかし、上記の方法では次のエラーが発生します。

System.IndexOutOfRangeException: インデックスが配列の範囲外でした。

では、何が間違っているのでしょうか?

4

4 に答える 4

5

がゼロの場合、に等しいiインデックスで配列にアクセスします。これは、配列の最後の有効なインデックスを超える 1 つです。newpositionlength0length-1

これで問題は解決します。

int newposition = length - i - 1;
于 2012-10-19T01:51:57.967 に答える
2

長さが 10 文字だとします。ループの最初の反復では、newposition = 10 - 0 = 10 です。このインデックスは、配置された配列の範囲外です。

また、文字列の反転に関するこの投稿も参照してください。その投稿から...

public static string Reverse( string s )
{
    char[] charArray = s.ToCharArray();
    Array.Reverse( charArray );
    return new string( charArray );
}
于 2012-10-19T01:53:58.127 に答える
1
public string reArrange(string s)
{
    char[] array = s.ToCharArray();
    int length = array.Length;
    char[] arranged = new char[length];

    for (int i = 0; i < length; i++)
    {
       int newposition = length - i - 1;
       arranged[newposition] = array[i];
    }
    return new string(arranged);
}
于 2012-10-19T01:58:05.567 に答える
1

あなたは遠くへ行く、

for (int i = 0; i < length-1; i++)
于 2012-10-19T01:52:00.453 に答える