2014-09-18 2 views
-4

문자열 배열을 사용하지 않고 문자열을 정렬하려고하지만 오류가 발생합니다 (속성 또는 인덱서 'string.this [int]'는 할당 할 수 없습니다 - 읽기 전용 임). 사용하고 싶지 않습니다. 임의의 스트링 빌더 또는 배열 메소드.문자열 정렬

string s = "aedcb"; 
string a = s; 
char t; 

for (int p = 0; p <= a.Length - 2; p++) 
{ 
    for (int i = 0; i <= a.Length - 2; i++) 
    { 
     if (a[i] > a[i + 1]) 
     { 
      t = a[i + 1]; 
      a[i + 1] = a[i];  //Here is the error 
      a[i] = t;   //Here is the error 

      Console.WriteLine(a); 
     } 
    } 
} 

s = a.ToString(); 

Console.ReadLine(); 
+2

문자열을 직접 수정할 수 없으며 변경할 수 없습니다. 새로운 문자열을 만들거나'StringBuilder'를 사용하십시오. – Mephy

+0

왜 정확히 내장 된 정렬 방법을 사용하지 않습니까? – StriplingWarrior

+0

문자열은 변경할 수 없으므로 사용자가하는 것처럼 조작 할 수없는 것이 당연합니다. 다른 데이터 구조를 피하는 특별한 이유가 있습니까? – Matt

답변

9

문자열은 변경할 수 없습니다. ToCharArray()으로 전화를 걸어 돌연변이해야합니다. new String(mutated)

1

이것은 알파벳 순으로 오름차순으로 표시되며 (알파벳순이지만 대소 문자가 영향을줍니다) 문자열의 저장을 위해 임시 값을 사용하여 반복합니다.

string sortString(string s) 
    { 
     string newString = s; 
     for (int p = 0; p < s.Length; p++) 
     { 
      for (int i = p; i < s.Length; i++) 
      { 
       if (s[p] > s[i]) 
       { 
        newString = ""; 
        for (int j = 0; j < s.Length; j++) 
        { 
         if (j == i) 
         { 
          newString += s[p]; 
         } 
         else 
          if (j == p) 
          { 
           newString += s[i]; 

          } 
          else 
          { 
           newString += s[j]; 

          } 
        } 
        s = newString; 
       } 
      } 

     } 
     return newString; 
    } 
+0

ASCII는 틈새 및 고풍 문자 집합입니다. .NET의'char'는 하나의 UTF-16 코드 유닛을 저장하며, 그 중 하나 또는 두 개는 유니 코드 코드 포인트를 인코딩합니다. 물론 두 개가 필요한 경우 다른 코드 포인트의 코드 단위로 정렬하면 횡포하고 잘못된 코드 단위 시퀀스가 ​​만들어집니다. –

0

이것은 내가 어떻게했는지입니다. 먼저 @ charlet으로 변환했습니다.

string a = "acegikmobdfhjln"; 
     char[] b = a.ToCharArray(); 
     char t; 

     for (int h = 0; h < b.Length; h++) 
     { 
      for (int i = 0; i <= b.Length - 2; i++) 
      { 
       if (b[i] > b[i + 1]) 
       { 
        t = b[i + 1]; 
        b[i + 1] = b[i]; 
        b[i] = t; 

       } 
      } 

     } 
     foreach (char item in b) 

      Console.Write(item + " "); 
     Console.WriteLine(); 

     Console.ReadLine();