c разбить строку на слова split

БлогNot. C++: как разобрать строку на слова средствами string?

C++: как разобрать строку на слова средствами string?

Во встроенном классе string, в отличие от нативных строк char * , нет такой же удобной функции для разбора на слова, как strtok в классическом C. Свойств вроде DelimitedText, как в VCL, тоже не наблюдается. Меж тем, задача остаётся актуальна, и решить её в простейшем случае можно так (консоль Visual Studio 2010):

Здесь бьётся, в общем, не на слова, а на лексемы, поэтому не исключаются знаки препинания, стоящие последними символами строк vecstr[i] , а также слова, не содержащие ни одного алфавитно-цифрового символа и т.п. Но направление, в котором можно смотреть для решения задачи, пример показывает :)

Разумеется, ничто не мешает сделать разбор и более традиционными, чем переопределённый оператор, ведь все методы для проверки и извлечения подстрок в классе string имеются. Например, по аналогии с Паскалем, можно так (по-прежнему дано только базовое разбиение на лексемы, но не анализ отдельных строк):

05.10.2015, 17:44; рейтинг: 9584

Подскажите, а способа как использовать для разделения нужной мне строки на подстроки, которые будут заноситься в массив, нет?

Как в PHP — explode, а C# — split

4 ответа 4

Вроде это то, что вы хотели:

Стандартного способа нет. Нужно 1) либо писать свою функцию, 2) либо подключать внешнюю библиотеку, 3) либо преобразовывать std::string в c_str и использовать strtok . Например,

Более » C++ » способ следующий:

В этом случае, правда, нельзя указать свой собственный разделитель. В качестве более удобной альтернативы могу предложить boost::string_algo .

Такая реализация работает даже на msvc2010

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ или задайте свой вопрос.

Связанные

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459

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. Это исключит из массива пустые элементы без всяких заморочек :)

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

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

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