2014-03-05 146 views
1

我有一個字符數組。我想刪除數組中某個位置的元素。刪除字符數組中的字母

可以說我有這個字符數組:OVERFLOW

我想從上面的數組中刪除R和調整字符數組這樣的話是: OVEFLOW

我想能夠在某個位置添加一個新的字母給數組。可以說我想添加字母T,所以這個詞會像:OVETFLOW

我不只是想要替換兩個字母。我想先完全刪除,然後在不同的位置添加該字母。

我試圖解決用於字符串數組的Remove()方法的問題。但我還沒有弄清楚哪種方式是解決問題的最佳方法。

+0

你想刪除當前字母或從當前位置?如果陣列中有兩個字母「R」會怎麼樣? –

+0

將char數組轉換爲字符串,執行操作,然後轉換回char數組。 –

+0

數組有固定大小。您無法從陣列中移除項目。您可以替換其值,或創建不同大小的新陣列。 – MarcinJuraszek

回答

5
var theString = "OVERFLOW"; 
var aStringBuilder = new StringBuilder(theString); 
aStringBuilder.Remove(3, 1); 
aStringBuilder.Insert(3, "T"); 
theString = aStringBuilder.ToString(); 
2

試試這個:

char[] myCharArray = new char[] { 'O', 'V', 'E', 'R', 'F', 'F', 'L', 'O', 'W' }; 
string str = new string(myCharArray); 
int index = str.IndexOf('R'); 
str=str.Remove(index,1); 
str=str.Insert(index, "Z"); 

myCharArray = str.ToCharArray(); 
+0

我不想替換兩個字母。我想徹底刪除一個字母,然後在另一個位置添加另一個字母。 – EM10

+0

檢查我的編輯.... –

0

的另一種方法:

  string str = "OVERFLOW"; 
      var arr=str.ToList(); 
      arr.Remove('F'); 
      arr.Insert(3, 'T'); 
      str =new string(arr.ToArray()); 
0

作爲一個簡單的例子:

string str = "OWERFLOW"; 
char[] array = str.ToCharArray(); 

char[] array2 = RemveFromArray(array, 'R'); 
char[] array3 = InsertIntoArray(array2, 'T', 3); 
char[] array4 = RemveFromArrayAt(array, 3); 

static char[] RemveFromArray(char[] source, char value) 
{ 
    if (source == null) 
     return null; 

    char[] result = new char[source.Length]; 

    int resultIdx = 0; 
    for (int ii = 0; ii < source.Length; ii++) 
    { 
     if(source[ii] != value) 
      result[resultIdx++] = source[ii]; 
    } 

    return result.Take(resultIdx).ToArray(); 
} 

static char[] InsertIntoArray(char[] source, char value, int insertAt) 
{ 
    if (source == null || insertAt > source.Length) 
     return null; 

    char[] result = new char[source.Length + 1]; 

    Array.Copy(source, result, insertAt); 
    result[insertAt] = value; 
    Array.Copy(source, insertAt, result, insertAt + 1, source.Length - insertAt); 

    return result; 
} 

static char[] RemveFromArrayAt(char[] source, int removeAt) 
{ 
    if (source == null || removeAt > source.Length) 
     return null; 

    char[] result = new char[source.Length - 1]; 
    Array.Copy(source, result, removeAt); 
    Array.Copy(source, removeAt + 1, result, removeAt, source.Length - removeAt - 1); 

    return result; 
}