2012-11-06 45 views
1

我有这种方法,给我IndexOutOfRangeException,你们可以帮我理解为什么吗?颠倒字符串c#

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(); 
    } 

的方法已被写入这样(没有例外)

+3

字符串索引都是*从零开始*。 – Jon

+1

有一个linq方法可以做相反的操作:http://tipsandtricks.runicsoft.com/CSharp/StringReverse.html –

+1

下面是使用'Array.Reverse'的方法:http://stackoverflow.com/questions/228038/best-way-to-reverse-a-string –

回答

4

C#中的数组是从0开始的,而不是从1开始的。你迭代从n 1,但你需要遍历从n-1 0:

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

在另一方面,如果你只是想扭转串,还有使用LINQ一个简单的解决方案:

var reversed = new String(inTxt.Reverse().ToArray()) 
+0

我现在有很多更好/更简单的方法来做到这一点,但它必须这样写 – MrProgram

+0

@ user1789325:我以为这么多,这就是为什么我也回答你原来的问题,而不是提供一个替代方案。 ;-) – Heinzi

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作为字符串数组是基于零的。

0

扩展方法:

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

和使用:

var reverted = source.Reverse(); 

P.S.尽可能多地保留它。

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(); 
} 
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(); 
    } 
+0

应该是'i> = 0'? – Kami

+0

是的。非常感谢@Kami – Ahmad

1

扭转强制试试这个

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

string input = "hello world"; 
char[] inputarray = input.ToCharArray(); 
Array.Reverse(inputarray); 
string output = new string(inputarray); 
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(); 
}