1

IndexOutOfRangeException を発生させるこのメソッドがあります。理由を理解するのを手伝ってもらえますか?

public string FlipString(string inTxt)
    {
        StringBuilder outTxt = new StringBuilder();
        for (int i = inTxt.Length; i > 0; i--)
        {
            char ch = inTxt[i];
            outTxt.Append(ch);
        }
        Console.WriteLine(outTxt.ToString());
        return outTxt.ToString();
    }

メソッドはこのように書かなければなりません(例外なし)

4

7 に答える 7

4

C# の配列は、1 ベースではなく 0 ベースです。から1 まで反復していますが、0nから反復する必要があります。n-1

for (int i = inTxt.Length - 1; i >= 0; i--)

一方、文字列を逆にしたい場合は、LINQ を使用した簡単な解決策があります。

var reversed = new String(inTxt.Reverse().ToArray())
于 2012-11-06T10:09:56.027 に答える
1

逆にこれを試してみてください

string reversed = new string(stringinput.Reverse().ToArray());

また

string input = "hello world";
char[] inputarray = input.ToCharArray();
Array.Reverse(inputarray);
string output = new string(inputarray);
于 2012-11-06T10:11:16.557 に答える
0

これを試して

public string FlipString(string inTxt)
{
    StringBuilder outTxt = new StringBuilder();
    for (int i = inTxt.Length-1; i >= 0; i--)
    {
        char ch = inTxt[i];
        outTxt.Append(ch);
    }
    Console.WriteLine(outTxt.ToString());
    return outTxt.ToString();
}

文字列配列はゼロベースであるため、ループへの最初のエントリを文字列の長さ - 1 にする必要があります。

于 2012-11-06T10:09:45.887 に答える
0

延長方法:

public static string Reverse(this string source)
{
    char[] arr = source.ToCharArray();
    Array.Reverse(arr);
    return new string(arr);
}

そして使用:

var reverted = source.Reverse();

ps できるだけ単純にしてください。

于 2012-11-06T10:09:49.710 に答える
0
public string FlipString(string inTxt)
{
    StringBuilder outTxt = new StringBuilder();
    for (int i = inTxt.Length - 1; i >= 0; i--)
    {
        char ch = inTxt[i];
        outTxt.Append(ch);
    }
    Console.WriteLine(outTxt.ToString());
    return outTxt.ToString();
}
于 2012-11-06T10:09:55.683 に答える
0

文字列はゼロベースであるため、文字列の長さから 1 を引いた最後の文字から開始する必要があります。

public string FlipString(string inTxt)
    {
        StringBuilder outTxt = new StringBuilder();
        for (int i = inTxt.Length-1; i >= 0; i--)
        {
            char ch = inTxt[i];
            outTxt.Append(ch);
        }
        Console.WriteLine(outTxt.ToString());
        return outTxt.ToString();
    }
于 2012-11-06T10:09:56.120 に答える
0

文字列のインデックスは 0 から始まり、長さ - 1 になります。

最初の操作は

char ch = inTxt[inTxt.Length]

だからあなたのコードは

public string FlipString(string inTxt)
{
    StringBuilder outTxt = new StringBuilder();
    for (int i = inTxt.Length - 1; i > 0; i--)
    {
         char ch = inTxt[i];
         outTxt.Append(ch);
    }
    Console.WriteLine(outTxt.ToString());
    return outTxt.ToString();
}
于 2012-11-06T10:11:29.743 に答える