2017-01-09 5 views
-3

の倍数を3#のC#で置き換えることはできますか?たとえば、文字列が"000100000"で、"000""+"に置き換えたいとしますが、すべてという3文字のグループに置き換えてください。追加条件:グループを末尾から始まるから変更する必要があります。"000100000"の場合は"+100+"を出力します。Cの#3の倍数のみを置換する#

+0

サブストリングがそれをグーグル、あなたが探しているもので、最初に何かをしてみてください。 – Universus

+0

これは非常に単純なアルゴリズム問題です。プログラマーになりたいと思っていて、いくつかのC#の基礎を知っている人は誰でも自分自身でこれを理解できるはずです。このような簡単な質問だけを解決するための専門知識を育てることを恐れないでください。 –

+1

あなたの質問に関してもう少し詳細を追加してください - 入力は任意の文字列ですか?上の例では、アルゴリズムが000100000を+ 1 + 00に変更しないのはなぜですか? (000)1(000)00は3つのグループです。また、スタックオーバーフローは、人々があなたのために答えを書いてくれるサイトではありません。あなたがすでに試みたこと、またはあなたが持っている具体的な問題を示してください。 – PartlyCloudy

答えて

0

私は正規表現、例えば:

string source = "000100000"; 

// "+100+" 
string result = Regex.Replace(
    source, 
    "0{3,}", 
    match => new string('0', match.Length % 3) + new string('+', match.Length/3)); 

テスト使用することをお勧め:

001  -> 001 
    0001  -> +1 
    000100  -> +100 
    0001000 -> +1+ 
    00010000 -> +10+ 
    000100000 -> +100+ 
    0001000000 -> +1++ 
-1

交換する前に文字列を逆にして、問題が解決した後。あなたがサブストリングでこれを行うことができ

string ReplaceThreeZeros(string text) 
{ 
    var reversed = new string(text.Reverse().ToArray()); 
    var replaced = reversed.Replace("000","+"); 
    return new string(replaced.Reverse().ToArray()); 
} 
+0

テキストがどのように反転するのか分かりません。また、問題は3つの「0」のグループについてではなく、一般に3つのグループについてです。 – Abion47

0

::のような

何か

forループ
string strReplace = "000100000"; 

//Store your string on StringBuilder to edit the string 
StringBuilder sb = new StringBuilder(); 

sb.Append("+"); 
sb.Append(strReplace.Substring(0, 3)); //Use substring, 0 is the start of index and 3 is the length as your requirement 
sb.Append("+"); 
sb.Append(strReplace.Substring(3, 3)); 
sb.Append("+"); 
sb.Append(strReplace.Substring(6, 3)); 
sb.Append("+"); 

strReplace = sb.ToString(); //Finally replace your string instance with your result 

等により今回の代わりに、部分文字列を使用して、私たちはあなたのすべての文字を取得するためにchar配列を使用文字列:

 string strReplace = "000100000"; 
     char[] chReplace = strReplace.ToCharArray(); 
     StringBuilder sb = new StringBuilder(); 
     for (int x = 0; x <= 8; x++) 
     { 
      if (x == 0 || x == 3 || x == 6 || x == 9) 
      { 
       sb.Append("+"); 
       sb.Append(chReplace[x]); 
      } 
      else 
      { 
       sb.Append(chReplace[x]); 
      } 
     } 
     sb.Append("+"); 
     strReplace = sb.ToString(); 
+1

Eh、 '(x == 0 || x == 3 || x == 6 || x == 9)' '* susecious *、どうして' ... && x == 12 || x == 15 || ... || x == 3003 || ...?あなたは、おそらく 'x%3 == 0 'を意味します。 –

+0

私が&&を使用すると、xの条件がすべて満たされた場合にのみトリガされます。 –

1

これには正規表現を使用できます。

(0{3}(?!0+)) 

これは、3つの0のグループの後に他のゼロがないことを確認するために、負の先読みを使用しています - 0の任意の数のシーケンスのために、他の言葉で、それだけで最後と一致します3.

これを変更することで、先見の明と見えることを微妙に異なるものにすることができます。

0

オーケーを、これらの答えの束が3 '0'秒の検出グループに取り組んでいます。ここでは3 anythings(3つの文字のグループ内の文字列を読み込む)のグループを扱うの答えです:

string GroupsOfThree(string str) 
{ 
    StringBuilder sb = new StringBuilder(); 

    for (int i = 0; i + 2 < str.Length; i += 3) 
    { 
     string sub = str.Substring(i, 3); 
     if (sub.All(c => c == sub[0])) 
      sb.Append("+"); 
     else 
      sb.Append(sub); 
    } 

    return sb.ToString(); 
} 
0

あなたは置き換える正規表現を使用することができます。

"[0]{3}|[1]{3}" 

上記の正規表現は、C#で以下のように使用することができます:

string k = "000100000"; 
Regex pattern = new Regex("[0]{3}|[1]{3}"); 
pattern.Replace(k, "+"); 
関連する問題