2014-03-06 132 views
1

我有一個字符串變量。我想交換字符串中的兩個字符。 我想隨機交換彼此接近的兩個字符。如何交換字符串變量中的兩個字符?

這就是我所做的: 我已經這樣做了,但在某些文字中我得到錯誤。

string word = txtWord.Text; 
Random rand = new Random(); 
int randomNumber= rand.Next(0, word.Length); 
string swappedWord = SwapCharacters(lastWord, randomNumber, randomNumber + 1); 

private string SwapCharacters(string value, int position1, int position2) 
{ 
    char[] array = value.ToCharArray(); // Convert a string to a char array 
    char temp = array[position1]; // Get temporary copy of character 
    array[position1] = array[position2]; // Assign element 
    array[position2] = temp; // Assign element 
    return new string(array); // Return string 
} 
+4

嘗試'rand.Next(0,word.Length - 1);' –

+0

你正在得到什麼錯誤? – AbhinavRanjan

+1

您應該在您的問題中包含異常,例如您正在獲取的'IndexOutOfRangeException'。 –

回答

1

只需更改線路如下:

int randomNumber= rand.Next(0, word.Length -1); 

讓我們看看它是否正常工作。

+0

當我這樣做。我知道它的正確性,但如果單詞只有1個字符,當我更改swapCharaters()方法中單詞的位置時,將會出錯。 – EM10

+0

@ EM10爲什麼交換1個字符?只需將它放在方法的頂部:if(value.Length <= 1)返回值;' –

+0

這是因爲字符串中只有一個字符,並且在您的方法中,您傳遞'randomNumber + 1'爲好。如果(randomNumber pareto

0

試試這個。還要檢查單詞是否爲空。

int randomNumber= rand.Next(0, word.Length - 1); 
3

使用StringBuilder:

//如果你想更換

StringBuilder sb = new StringBuilder(theString); 
    sb[index] = newChar; 
    theString = sb.ToString(); 

//交換

string input = "AXBYCZ"; //Sample String 
    StringBuilder output = new StringBuilder(); 

    char[] characters = input.ToCharArray(); 

    for (int i = 0; i < characters.Length; i++) 
    { 
     if (i % 2 == 0) 
     { 
     if((i+1) < characters.Length) 
     { 
      output.Append(characters[i + 1]); 
     } 
        output.Append(characters[i]); 
     } 
    } 
0

試試這個代碼。這是最容易改變你的代碼

int randomNumber= rand.Next(0, word.Length-2);