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

Строку нужно разбить на слова и записать их в массив string[].

1 ответ 1

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

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

Похожие

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

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

Нужно разделить строку на массив слов, где в качестве разделителей, могут быть любые символы, кроме букв и символов . ! ? ; : ( ) .
Догадываюсь, что тут не обойтись без регулярных выражений, но как их писать пока не знаю, а в интернете инфы по моему вопросу не нашел.

Пишу на С#, заранее спасибо.

1 ответ 1

Вы ставите задачу как "разделители любые, а слово может состоять только из ограниченного набора символов" и эта задача решается намного сложнее, чем "слово может состоять из любых символов, а нужно описать разделители слов".

Давайте по-простому: разделитель слов — это пробелы и знаки препинания. Всё.

У вас же будет сложнее: в слове могут встретиться дефисы (Иванов-Крамской), цифры (ТОП100), символы разных алфавитов, в том числе умлауты ("Männer") и прочая диакритика и многое, многое другое.

Вернитесь ещё раз к общему описанию своей задачи: "Нужно разделить строку на массив слов" и помедитируйте над тем, что проще описать: набор символов слова или набор символов-разделителей.

Читайте также  Расставьте скобки чтобы равенство стало

Плюс, буквально вчера пробегал такой же вопрос и там давали ссылку на en-so с регуляркой которая вам подойдёт в качестве основы. (Нужны будут например, кавычки ёлочкой)

Регулярки — учите, это один из механизмов, который широко используется в разных языках и является тем, что нужно знать каждому программисту.

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

strtok – разбиение строки на части по указанному разделителю.

#include
char *strtok(char *str, const char *sep);

str – указатель на разбиваемую строку.
sep – указатель на строку, содержащую набор символов разделителей.

NULL – если строку str невозможно разделить на части.
Указатель на первый символ выделенной части строки.

Функция strtok выделяет очередную часть строки, на которую указывает аргумент str, отделенную одним из символов разделителей указанных в строке, на которую указывает аргумент sep. Последовательный вызов функции strtok приводит к разбиению строки str на части (лексемы).

«При первом вызове функции strtok указывается начало разделяемой строки (str) и начало строки, содержащей разделители (sep). В начале функция strtok поочередно просматривает символы строки str и ищет символ, не содержащейся в строке разделителей sep. Если в строке str символ конца строки встречен раньше, чем был найден символ не входящий в строку sep, то разделить строку str на части нельзя и возвращается нулевой указатель (NULL). Если такой символ найден, он считается началом первой части строки str.»

Далее функция strtok ищет разделитель, то есть символ, входящий в строку sep. Если такой символ не найден, то считается, что строка str состоит из одной части и последующее разделения строки str будут возвращать нулевой указатель. Если такой символ найден. то он заменяется нулевым символом (символом конца строки). Далее функция strtok запоминает текущую позицию (указатель на символ, с которого будет начинаться поиск следующей части строки) и возвращает указатель на начало первой выделенной части строки.

Читайте также  При включении зарядки ноутбук выключается

Если функция strtok вернула не нулевой указатель, можно продолжить разбиение строки str на части. Для продолжения разбиения строки, повторно вызывается функция strtok, но вместо указателя на разбиваемую строку в качестве первого аугмента указывается NULL. В этом случае функция strtok продолжит разбиение с запомненного адреса. Алгоритм разбиения при этом останется тот же.

В примере, в строка «test1/test2/test3/test4» разбивается на части по разделителю “/” с помощью функции strtok. Результат разбиения выводится на консоль.

Вывод в консоль:

Исходная строка: test1/test2/test3/test4
Результат разбиения:
test1
test2
test3
test4

Ссылка на основную публикацию
Adblock
detector