Пользователь вводит через пробел строку чисел в консоль. Мне нужно разбить её на группы по 4 числа. Заранее мне не известно сколько таких будет групп. Помогите разобраться как это реализовать? Пример: мы вводим "1 1 1 1 0 0 0 0 2 2 2 2", и мне нужно разбить эту строку на "1 1 1 1", "0 0 0 0" и "2 2 2 2". Заранее мне не известно, что нужно разбить на 3 подстроки, но известно что в подстроке будут находиться по 4 числа
Asked
Active
Viewed 458 times
0
-
4 числа или 4 цифры? – Grundy Jun 25 '19 at 17:51
-
нужно 4 числа . – Spike Jun 25 '19 at 17:54
-
@Kerrrill, а чем число отличается от цифры? :) – Jun 25 '19 at 18:07
-
@LLENN, цифры это от 1 до 9 и 0, а числа это 26, 55 и т.д.))))) – Spike Jun 25 '19 at 18:17
-
@LLENN, https://ru.stackoverflow.com/a/453060/178988 – Qwertiy Jun 25 '19 at 18:35
2 Answers
0
Подключаем библиотеку MoreLINQ.
Пишем элементарный код:
string s = "1 1 1 1 0 0 0 0 2 2 2 2";
var batches = s.Split().Batch(4);
В batches 3 группы по 4 числа.
Если необходимы именно строки, дописываем в конец:
.Select(b => string.Join(" ", b))
Или ещё проще:
.Batch(4, b => string.Join(" ", b))
Не забываем открыть пространства имён:
using System.Linq;
using MoreLinq;
Если не хочется тянуть в проект лишнюю библиотеку, то разбиение на группы делается элементарно без неё.
Alexander Petrov
- 29,233
-
1Может быть утеряна информация о количестве пробелов между числами (если она важна, конечно) – Андрей NOP Jun 25 '19 at 18:43
0
Можно использовать регулярное выражение (\d+\W+){3}\d+:
var input = "1 2 3 4 12 23 34 45 123 234 345 456";
var pattern = @"(\d+\W+){3}\d+";
var matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
Console.WriteLine(match.Value);
Если в последней части может быть меньше четырех чисел, регулярку можно подправить до такой: (\d+\W+){0,3}\d+
Андрей NOP
- 28,687