Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.0.240] |
|
Сообщ.
#1
,
|
|
|
Всем привет. Можете помочь написать метод Инкриминирующий строку, принимающую в качестве аргумента в виде массива типа char. Пример результата:
00000007 - 00000008 SVA00001 - SVA00002 |
Сообщ.
#2
,
|
|
|
А что же сам - даже не попытаешься?
Это ничем не отличается от решения примера 799+1 |
Сообщ.
#3
,
|
|
|
Как-то так:
public string SymbolsIncrement(char[] source) { var numberedSymbols = source.Select((c, i) => new { Index = i, Symbol = c }).ToArray(); int? digitsFrom = numberedSymbols.SkipWhile(t => !char.IsDigit(t.Symbol)).FirstOrDefault()?.Index; if (!digitsFrom.HasValue) return new string(source); int digitsCount = numberedSymbols.Skip(digitsFrom.Value).TakeWhile(t => char.IsDigit(t.Symbol)).Count(); if (digitsCount == 0) return new string(source); int initialZerosCount = numberedSymbols.Skip(digitsFrom.Value).TakeWhile(t => t.Symbol == '0').Count(); int sourceNumericValue; if (!int.TryParse(new string(source.Skip(digitsFrom.Value).Take(digitsCount).ToArray()), out sourceNumericValue)) return new string(source); StringBuilder outResult = new StringBuilder(); if (digitsFrom.Value > 0) outResult.Append(source.Take(digitsFrom.Value).ToArray()); if (initialZerosCount > 0) outResult.Append(new string('0', initialZerosCount)); outResult.Append(++sourceNumericValue); if (digitsFrom.Value + digitsCount < source.Length) outResult.Append(source.Skip(digitsFrom.Value + digitsCount).ToArray()); return outResult.ToString(); } |
Сообщ.
#4
,
|
|
|
Ilya81Спасибо
|