2012-11-06 65 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(); 
}