0

Пользователь вводит через пробел строку чисел в консоль. Мне нужно разбить её на группы по 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 числа

Spike
  • 21

2 Answers2

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;

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

  • 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+