На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Инкрементирование строки
    Всем привет. Можете помочь написать метод Инкриминирующий строку, принимающую в качестве аргумента в виде массива типа char. Пример результата:
    00000007 - 00000008
    SVA00001 - SVA00002
      А что же сам - даже не попытаешься?
      Это ничем не отличается от решения примера 799+1
        Как-то так:
        ExpandedWrap disabled
                  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();
                  }
          Ilya81Спасибо
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0176 ]   [ 16 queries used ]   [ Generated: 20.04.24, 00:09 GMT ]