2016-03-28 9 views
0

大文字と小文字の連続した(交互に)フレーズワードを変換する必要があります。LowerCaseとUpperCase交替c#

例。

入力:
the girl is pretty.

が出力:
tHe GiRl Is PrEtTy

私は以下のコードを試してみましたが、それは最初の文字だけで変換:

char[] array = texto.ToCharArray(); 
if (array.Length >= 1) 
{ 
    if (char.IsLower(array[0])) 
    { 
     array[0] = char.ToUpper(array[0]); 
    } 
} 
for (int i = 1; i < array.Length; i++) 
{ 
    if (array[i - 1] == ' ') 
    { 
     if (char.IsLower(array[i])) 
     { 
      array[i] = char.ToUpper(array[i]); 
     } 
    } 
} 
return new string(array); 

おかげ

+0

、 のchar []配列= texto.ToCharArray()。 if(array.Length> = 1) { if(char.IsLower(array [0]) { array [0] = char.ToUpper(array [0]); }の }(INT I = 1; I

+0

ただし、最初の文字を変換するのは –

答えて

2

ファンシーソリューションをLINQを使用して:

string someString = "the girl is pretty"; 
string newString = string.Concat(
    someString.ToLower().AsEnumerable().Select((c, i) => i % 2 == 0 ? c : char.ToUpper(c))); 

これは、基本的には、以下のん:

  1. は小文字に文字列を変換します。
  2. 各文字を繰り返します。
  3. すべての2文字目を大文字に変換します。
  4. 文字を1つの文字列に結合します。

より「古典的」ソリューションは、次のようになります。pokeによって

string someString = "the girl is pretty"; 

StringBuilder sb = new StringBuilder(); 
bool uppercase = false; 
foreach (char c in someString) 
{ 
    if (uppercase) 
     sb.Append(char.ToUpper(c)); 
    else 
     sb.Append(char.ToLower(c)); 

    uppercase = !uppercase; 
} 

string newString = sb.ToString(); 
+0

ラムダ/モジュラスのように!それは滑らかです! – David784

+0

これは問題ありません!ありがとう –

+0

@poke 'String.Join'の代わりに' String.Concat'を使うことができます。 – reduckted

0

回答が正しかった、しかし、それはケースを交互にスペースが含まれています。私は前の答えにいくつか微調整を行い、文字列のスペースを無視します。私が試して

string someString = "the girl is pretty"; 
string space = " "; 

char[] str = someString.ToCharArray(); 
char[] str2 = space.ToCharArray(); 

bool uppercase = false; 

StringBuilder sb = new StringBuilder(); 

foreach (char c in str) 
{ 
    if (c != str2[0]) 
    { 
     if (uppercase) 
      sb.Append(char.ToUpper(c)); 
     else 
     { 
      sb.Append(char.ToLower(c)); 
     } 
     uppercase = !uppercase; 
    } 
    else 
    { 
     sb.Append(c); 
    } 
} 

string newString = sb.ToString();