2014-03-05 3 views
1

문자 배열이 있습니다. 배열의 특정 위치에서 요소를 제거하고 싶습니다. OVEFLOW문자 배열에서 문자 제거

내가 원하는 : 단어가 될 수 있도록

내가 위의 배열에서 R을 제거하고 문자 배열의 크기를 조정하려면 OVERFLOW :

내가이 문자 배열이 있다고 가정하자 특정 위치의 배열에 새 문자를 추가 할 수 있어야합니다. 단어가 같이 표시되도록 문자 T를 추가한다고 가정 해 보겠습니다. OVETFLOW

두 글자 만 바꾸려하지 않습니다. 먼저 다른 위치에서 편지를 완전히 제거한 다음 추가하고 싶습니다.

문자열 배열에 사용되는 Remove() 메서드로 문제를 해결하려고했습니다. 하지만 문제를 해결하는 가장 좋은 방법은 어느 것이지 알아 내지 못했습니다.

+0

당신이 현재의 문자 또는 현재 위치에서 제거 하시겠습니까 ? 배열에 두 글자 'R'이 있으면 어떨까요? –

+0

char 배열을 string으로 변환하고, ops를 수행 한 다음 다시 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; 
}