2010-11-22 17 views
4

C#で文字列を文字の配列に分割するにはどうすればよいですか?使用C#で単語の文字を配列に分割するにはどうすればよいですか?

例文字列の単語は、「ロボット」です。

プログラムは、プリントアウトする必要があります

r 
o 
b 
o 
t 

orginalコードスニペット:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Text.RegularExpressions; 


namespace Testing 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     String word = "robot"; 

     String[] token = word.Split(); // Something should be placed into the() to 
     //print letter by letter?? 

     foreach (String r in token) 
     { 
      Console.WriteLine(r); 
     } 
    } 
} 
} 

はどのようにコードが正しく実装することができますか?

+7

「アルファベット」という単語を使用すると、ほとんどの場合「文字」と書かれているため、非常に混乱する可能性があります。 –

+0

「アルファベット」を「文字」に置き換えると、あなたの質問がより理にかなっていると思います。それはあなたが欲しい言葉ですか? – Nobody

+0

「アルファベット順にアルファベットを印刷する」とはどういう意味ですか? –

答えて

12

これはなぜですか?あなたは、次の操作を行い、(1行に1 1)ことを印刷したい場合は

string s = "robot"; 
char[] charArray = s.ToCharArray(); 

public void WriteLetters(string s) 
{ 
    foreach (char c in s) 
    { 
     Console.WriteLine(c); 
    } 
} 

あなたは本当に、明示的な文字列でそれを確認したい場合は、次の手順を実行し

for (int i = 0; i < charArray.Length; i++) 
{ 
    Console.WriteLine(charArray[i]); 
} 

私はあなたが何をしようとして、実際にはわからないので、私は道オフベースかもしれません。トークン化によって、あなたは配列に文字を格納意味場合

は、あなたがすでに持っているStringオブジェクトインチ真

ない実際、文字列は、C/C++で、文字列が実際に文字の配列であるのに対し、文字値を反復処理するインデクサーを使用しているため。私たちの目的のために、文字列を文字の配列のように扱うことができます

+0

@Downvoter、なぜ-1?私の答えは事実上間違っていますか? –

10

クラスStringIEnumerable<char>を実装し、したがって、文字列の手紙を介して実行するために、あなただけのIEnumerator<char>をつかむと、一度にchar秒1を処理することができます。これを行う1つの方法は、使用しているforeach

foreach(char c in "robot") { 
    Console.WriteLine(c); 
} 

あなたはあなただけString.ToCharArrayを使用することができ、アレイ内の各charが必要な場合:

char[] letters = "robot".ToCharArray(); 
+0

単語をトークン化する方法はありますか? – JavaNoob

+4

@JavaNoob:それはあなたにとってどういう意味ですか? – jason

+0

@Jason可能であれば、私は単語を鳴らすためにループを使いたくありません。そして、私は配列内の各アルファベットが必要です。 – JavaNoob

1

は、あなたがこのような何かを意味していますか?

foreach(var alpha in myString.Where(c => Char.IsLetter(c))) 
{ 
    Console.WriteLine(alpha); 
} 
+0

単語をトークン化する方法はありますか? – JavaNoob

1

あまりにも多くのことをしようとしています。

このお試しください:

 String word = "robot"; 

     foreach (char letter in word) 
     { 
      Console.WriteLine(letter); 
     } 

編集:

ループせずに、あなたがこれを行うことができ、文字配列に文字列を分割するには:あなたがたToArrayを(使用することができますword.ToCharArray()

+0

上記のコメントをお読みください。 – JavaNoob

+0

JavaNoob:私の編集を参照 – Nobody

1

を)メソッドを呼び出してchar配列を返します。

string word = "robot"; 
char[] array = word.ToArray(); 
+0

'ToArray'は' String'の拡張メソッドであり、 'using System.Linq;'をファイルに追加する必要があることに注意してください。 – Nobody

+0

しかし、どうしてですか?文字列は 'IEnumerable 'を実装しています。ほとんどの目的と目的のために、そのまま(特にLINQを使用して)char配列のように動作します。 –

1

誰もが文字列を文字の配列に変換したいようです。

for(int i = 0; i < tmpString.Length; i++) 
Console.WriteLine(tmpString[i]); 

について

は、どのように今、あなたはコピーを作るの余分なメモリなしchar配列の速さを持っています。

編集:文字列は内部的に文字の配列です。文字列は不変なので値を変更する方法はありません。しかし、そのchar配列から読み取ることができます。 String =読み取り専用のchar配列です。

文字列を「編集」しない限り、文字列をChar []に変換する理由は考えられません。

long lTicks; 
      char[] tmpChar = { 'a', 'b', 'c', 'd', 'e' }; 
      String tmpString = "abcde"; 
      char chRead; 

      lTicks = DateTime.Now.Ticks; 
      for (int i = 0; i < 100000000; i++) 
       chRead = tmpChar[i%5]; 

      Console.WriteLine(((DateTime.Now.Ticks - lTicks)/10000).ToString()); 

      lTicks = DateTime.Now.Ticks; 
      for (int i = 0; i < 100000000; i++) 
       chRead = tmpChar[i % 5]; 

      Console.WriteLine(((DateTime.Now.Ticks - lTicks)/10000).ToString()); 

      lTicks = DateTime.Now.Ticks; 
      for (int i = 0; i < 100000000; i++) 
       chRead = tmpString[i%5]; 

      Console.WriteLine(((DateTime.Now.Ticks - lTicks)/10000).ToString()); 

      lTicks = DateTime.Now.Ticks; 
      for (int i = 0; i < 100000000; i++) 
       chRead = tmpString[i % 5]; 

      Console.WriteLine(((DateTime.Now.Ticks - lTicks)/10000).ToString()); 

      Console.ReadLine(); 

面白いことに、実際にはStringはChar []よりも一貫して高速です。結果に影響する負荷時間の問題がないことを確認するために、それぞれ2回ずつ実行しました。最適化されたリリースとしてコンパイルされます。 Char []は〜1950msで、ストリング〜1850msは毎回走っていました。

+0

誰もがそれをやっているのは、彼が望むものだからです。私たちがコンソールにキャラクターを書いているだけの場合、私は以下の答えでそのことに取り組んだ。 –

+0

'string'はオブジェクトか文字の配列ですか? –

+0

文字列を文字列に分割したい*キー部分*個々の文字を出力できるようにする。彼はあなたが文字の配列のような文字列を扱うことができるかどうか分からなかったように聞こえますが、彼は彼のオプションが分からないことを理解して読んでいたと思いました。 – Bengie

関連する問題