C# — Как удалить символ из строки при посимвольной обработке строки в цикле?
Исходную строку не трогать, а формировать новую посимвольно. Удаляемые символы можно отмечать булевыми флажками (переменными). То бишь, пока помечено флажком, пропускать, не копируя символы в целевую строку.
Проще всего использовать регулярные выражения, если это допустимо:string value = "ab+0.1973-1.1";
string result = Regex.Replace(value, @"(\.\d{2})\d+", "$1");
Если использовать цикл, то нужно создавать новую строку, но вместо string лучше использовать StringBuilder, т.к. при добавлении данных к string строка постоянно будет пересоздаваться, что в конечном итоге может негативно отразиться на производительности:string inputString = "ab+0.1973-1.1";
var result = new StringBuilder();
bool hasDot = false;
int digits = 0;

foreach(char ch in inputString)
{
  if (char.IsDigit(ch) && hasDot)
  {
    digits++;
  }
  else
  {
    digits = 0;
    hasDot = (ch == '.');
  }

  if (digits <= 2)
  {
    result.Append(ch);
  }
}

Console.WriteLine(result.ToString());
Если хорошо подумать и если это допустимо, то задачу можно решить с одним только StringBuilder (одним экземпляром), в котором изначально будет строка для обработки, используя метод Remove для удаления ненужных данных. При такой реализации, будет использоваться цикл for.