2012-11-06 2 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

리버스 작업을 수행하는 방법은 다음과 같습니다. http://tipsandtricks.runicsoft.com/CSharp/StringReverse.html –

+1

'Array.Reverse'를 사용하여 수행하는 방법은 다음과 같습니다. http://stackoverflow.com/questions/228038/최선의 방법에서 반전하는 문자열 –

답변

4

C#의 배열은 0부터 시작하고 1부터 시작하지 않습니다. 당신은 n 1로 반복되는,하지만 당신은 n-1에서 0으로 반복해야합니다

var reversed = new String(inTxt.Reverse().ToArray()) 
: 당신은 그냥 문자열을 되돌리고 싶은 경우,

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

을 다른 한편으로는, LINQ를 사용하여 간단한 해결책이있다

+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을 기준으로합니다.

0

확장 방법

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

및 사용 :

var reverted = source.Reverse(); 

추신 가능한 한 많이 유지하십시오.

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

문자열이 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

예. 고마워요 @ 카미 – 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(); 
}