Как разделить буквы слова в массив в C #? - PullRequest
4 голосов
/ 22 ноября 2010

Как мне разбить строку на массив символов в C #?

Примером Строкового слова является "робот".

Программа должна распечатать:

r
o
b
o
t

Фрагмент исходного кода:

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);
        }
    }
}
}

Как правильно реализовать коды?

Ответы [ 6 ]

13 голосов
/ 22 ноября 2010

Почему бы и нет?

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

Если вы действительно хотите увидеть его в явном массиве символов, сделайте следующее:

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

Если вы хотите затем распечатать это(По 1 на строку), выполните следующие действия:

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

Я не совсем уверен, что вы пытаетесь сделать, поэтому я могу быть далеко от базы.

Если по токенизациивы имеете в виду хранить символы в массиве, у вас уже есть это в объекте String 1 .

1 На самом деле не так, потому что String использует индексатор для итерации значений символов, тогда как в C / C ++ строка на самом деле является массивом символов.Для наших целей мы можем рассматривать строку как массив символов

10 голосов
/ 22 ноября 2010

Класс String реализует IEnumerable<char> и, следовательно, чтобы пропустить буквы строки, вы можете просто взять IEnumerator<char> и обрабатывайте char с по одному. Один из способов сделать это - использовать foreach:

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

Если вам нужен каждый char в массиве, вы можете просто использовать String.ToCharArray:

char[] letters = "robot".ToCharArray();
1 голос
/ 22 ноября 2010

Кажется, что все хотят преобразовать строку в массив символов.

Как насчет

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

Теперь у вас есть скорость массива символов без дополнительной памяти для создания копии.

edit: String - это внутренний массив символов, просто нет способа изменить их значения, потому что String неизменны.Но вы можете читать из этого массива символов.String = символьный массив только для чтения.

Я не могу придумать ни одной причины для преобразования String в 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 [].Я запускал каждые два раза, чтобы убедиться, что не было проблем с загрузкой, влияющих на результаты.Скомпилировано как релиз с оптимизацией.Char [] был для меня ~ 1950 мс, а String ~ 1850 мс для меня.

1 голос
/ 22 ноября 2010

Вы можете использовать метод ToArray () для возврата массива char.

string word = "robot";
char[] array = word.ToArray();
1 голос
/ 22 ноября 2010

Вы пытаетесь сделать слишком много.

Попробуйте это:

        String word = "robot";

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

Edit:

Чтобы разбить строку на массив символов без цикла, вы можете сделать это: word.ToCharArray()

1 голос
/ 22 ноября 2010

Вы имеете в виду что-то подобное?

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