2017-02-28 4 views
1

ユーザ入力文字列の一部をどうやって逆にすることができますか? 番号だけを逆にして、他の部分を逆にしてはいけません。Cの文字列の逆の部分#

ABC123DEF --> CBA123FED 
DISK0123CAR --> KSID0123RAC 
596ABCDEF --> 596FEDCBA 

はここで事前 でいただきありがとうございます私のコードです:

public static string ReverseStr(string sStrRev) 
{ 
     string output = ""; 
     Dictionary<int, char> SChar = new Dictionary<int, char>(); 

     int Cposition = 0; 

     for (int i = sStrRev.Length - 1; i >= 0; i--) 
     { 
      if (sStrRev[i] != '1' && sStrRev[i] != '2' && sStrRev[i] != '3' 
       && sStrRev[i] != '4' && sStrRev[i] != '5' 
       && sStrRev[i] != '6' && sStrRev[i] != '7' 
       && sStrRev[i] != '8' && sStrRev[i] != '9' 
       && sStrRev[i] != '0') 
       output += sStrRev[i]; 
      else 
      { 
       SChar.Add(Cposition, sStrRev[i]); 
      } 
      Cposition++; 
     } 

     for (int i = 0;i<sStrRev.Length ; i++) 
     { 
      if (SChar.ContainsKey(i)) 
       output.Insert(i, SChar[i].ToString()); 
     } 
      return output; 
} 
+1

あなたのコードは何を生成しますか?出力は何ですか?エラーはありますか? – hering

答えて

5

私はそれらを逆にLINQの逆転するすべての部分を一致させるために正規表現を使用して勧め:

using System.Linq; 
    using System.Text.RegularExpressions; 

    ... 

    string source = "DISK0123CAR"; 

    // KSID0123RAC 
    string result = Regex.Replace(source, 
    "[^0-9]+",          // all except numbers ... 
    match => string.Concat(match.Value.Reverse())); // ... should be reversed 

メソッドにラップしたい場合:

public static string ReverseStr(string sStrRev) { 
    // when implementing public methods do not forget to validate the input 
    if (string.IsNullOrEmpty(sStrRev)) 
     return sStrRev; 

    return Regex.Replace(sStrRev, 
     "[^0-9]+",           
     match => string.Concat(match.Value.Reverse())); 
    } 

編集:は、チャンク交換しないソリューションことに注意してください:場合

ABC123DEF --> CBA123FED // <- CBA and FED are not swapped 
    DISK0123CAR --> KSID0123RAC 
    596ABCDEF --> 596FEDCBA 

あなたはチャンクを逆にするためにも

string result = string.Concat(Regex 
    .Split(source, "([^0-9]+)") 
    .Reverse() 
    .Select(chunk => chunk.All(c => c >= '0' && c <= '9') 
     ? chunk 
     : string.Concat(chunk.Reverse()))); 

結果は

ABC123DEF --> FED123CBA // chunks are swapped 
    DISK0123CAR --> RAC0123KSID 
    596ABCDEF --> FEDCBA596 
です。
+0

最初の入力 'ABC123DEF - > FED123CBA' –

+0

@ un-luckyについてはどうでしょうか?' FED123CBA - > DEF123CBA':文字列の非数字部分、すなわち 'FED'、' CBA'はそれぞれ独立して逆になります。 –

+0

OPの最初の入力ABC123DEFを見て、彼はそれを 'FED123CBA'として変換したかったのです。 (これは 'ABC123DEF - > FED123CBA'から理解していますが)あなたのコードは' CBA123FED'を与えます。 OPの仕様が間違っている可能性があります..笑 –

関連する問題