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# 中的数组是从 0 开始的,而不是从 1 开始的。您正在从n1 迭代,但您需要从n-10 迭代:

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 开始并达到 Length - 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 回答