c разделение строки на части

Portal despre sfera tehnologiilor informaționale

[.NET] C# Разделить строку на слова

  • Solicitați un link
  • Facebook
  • Twitter
  • Pinterest
  • E-mail
  • Alte aplicații

Здравствуйте уважаемые программисты. Сегодня мы будем обсудить как разделить строку на слова.

Допустим у нас есть строка: «This is a test string» и нам нужно получить слова из этой строки. Посмотрев на нашу строку то у нас возникает идея что надо как-то символ пробела (Space) сделать разделителем и все полученные слова поместить в какой нибудь массив. Для разделения строк на слова нам поможет замечательная функция Split.

String.Split это метод позволяющий разделить строку на подстроки с помощью разделителя. Синтаксис метода таков:

Давайте рассмотрим небольшой пример разделения строк на слова:
Думаю тут все понятно:

  1. Задаем константу с текстом.
    Примечание: Можете использовать и переменную если вы хотите ввести текст с клавиатуры и получить его с помощью конструкций Console.ReadLine()
  2. Разделяем строку на подстроки и помещаем их в строковой массив. Separator или разделитель у нас пробел
  3. Из массива берется каждый элемент и выводится на экран.

Думаю вам было все понято, но бывают ситуации когда нам нужно получить слова из строки но строка у нас имеет такой вид: «Основные слова: дружба, любовь , счастье?!» ? Здесь присутствует символ пробела, двоеточие, запятая, вопросительный и восклицательный знак. Избавится от них можно вместо чтобы передавать только один знак(т.е. знак пробела) в качестве разделителя мы передадим массив символов:

Здесь вы скажете что все, проблема решена, но хочу вас огорчить так как если вы поставите Breakpoint(точка останова) на этот код то вы заметите что массив имеет не только слова но и пустые элементы:

[0] «Основные»
[1] «слова»
[2] «»
[3] «дружба»
[4] «»
[5] «любовь»
[6] «»
[7] «»
[8] «счастье»
[9] «»
[10] «»

Это произошло потому что между разделителями нет ни одного строчного символа. Избавится от пустых элементов массива легко, надо лишь добавить к методу String.Split перечисление StringSplitOptions.RemoveEmptyEntries. Это исключит из массива пустые элементы без всяких заморочек :)

Итак полный работоспособный код будет выглядеть так:

Недавно писал программу и столкнулся с одной проблемой.

Проблема заключалась в строке:

Так вот в чем же сама проблема:

«7» — это номер ключа в моей программе, а «@» — это часть ключа (вид). В одной функции мне надо узнать именно этот вид ключа(без цифры).

Как это сделать? Разделить эту строку на «7» и «@» отдельно?

2 ответа 2

Не совсем понятно, зачем в данном случае вообще разделять строку. Строка здесь — некий «контейнер», зачем же нам тогда нарушать его целостность, если мы всего лишь хотим прочитать один из его элементов?

Так что вопрос здесь — «Как получить значение символа строки, зная его индекс?».

1. operator[]

Наверное, самый привычный для новичков способ из представленных — с его помощью можно получить доступ к элементам массива. Применение абсолютно идентичное:

2. std::string::at(size_t)

Очень похожий на предыдущий оператор метод, принимает все тот же индекс, но при этом проверяет, не вышел ли этот индекс за пределы массива. Применение:

3. std::string::back()

В вопросе сказано, что нужный элемент находится на 2м месте, а размер строки — 2, значит, нужный элемент является последним в строке. У std::string есть метод обращения к первому и последнему элементу — front и back, в данном случае нам, очевидно, нужен std::string::back:

Почему не стоит использовать std::string::substr(. ), как указали в комментариях

Все просто, substr(. ) возвращает std::string, пускай даже от одного элемента, это все равно строка, а не символ.

Представим ситуацию, у нас есть функция, которая принимает символ:

Использование substr не будет работать — нам нужен char, а не string. Для данного вопроса можно, конечно, решить эту проблему:

Думаю, тут и без объяснений все ясно :)

Поэтому не стоит изобретать велосипед, если нам нужно получить символ — используем методы строки для получения символа, а не подстроки.

Как нарезать строку на равные части/фрагменты определенного размера?
Требуется функция, в которую можно передать любую строку и указать размер фрагмента. Если строка не делится на равные части, то последняя часть может быть короче предыдущих.
Например, для строки «68656c6c6f» надо получить ее части <"68","65". >.
Как это сделать на C#?

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: