Оставить в строке только первое и последнее вхождение цифр каждого слова - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Дана строка s, оставить в ней только первое и последнее вхождение цифр каждого слова, распечатать строку. Тоисть на вход 10001 555111, на выходе должно быть 1001 5511

Решение задачи: «Оставить в строке только первое и последнее вхождение цифр каждого слова»

textual
Листинг программы
var
  L: List<KeyValuePair<integer, integer>> := new List<KeyValuePair<integer, integer>>;
 
begin
  var s: string := '100001 555111';
  var wrd: string;
  
  for var i: integer := 1 to s.Length do
  begin
    if (s[i] = ' ') or (i = s.Length) then
    begin
      wrd := wrd + (i = s.Length ? '' + s[i] : '');
      L.Add(new KeyValuePair<integer, integer>(i + ord(i = s.Length) - wrd.Length - 1, wrd.Length));
      wrd := '';
    end
    else wrd := wrd + s[i];
  end;
  
  L.Reverse;
  foreach var pair in L do
  begin
    wrd := s.Substring(pair.key, pair.value);
    for var i: integer := wrd.Length downto 1 do
      wrd := wrd.Remove(pred(i), ord((wrd.IndexOf(wrd[i]) < pred(i)) and (wrd.LastIndexOf(wrd[i]) > pred(i))));
    s := s.Remove(pair.key, pair.value).Insert(pair.key, wrd);
  end;
  writeln(s);
end.

Объяснение кода листинга программы

В данном коде на языке PascalABC.Net реализована задача по обработке строки, в которой необходимо оставить только первое и последнее вхождение цифр каждого слова. Список переменных и их значений:

  1. L - список пар ключ-значение, где ключ - позиция первого вхождения цифры слова, а значение - длина слова.
  2. s - исходная строка, содержащая цифры.
  3. wrd - текущее слово, найденное в строке. Последовательность выполнения кода:
  4. Инициализация пустого списка L.
  5. Проход по каждому символу строки s.
  6. Если текущий символ является пробелом или равен последнему символу строки, то добавляем в список L пару ключ-значение, где ключ - позиция следующего символа (с учетом добавления пробела в конце строки), а значение - длина текущего слова wrd.
  7. Обновляем текущее слово wrd, добавляя в него текущий символ.
  8. После прохода по всем символам строки, переворачиваем список L, чтобы получить список пар ключ-значение в обратном порядке.
  9. Проход по каждой паре ключ-значение из списка L.
  10. Получаем текущее слово wrd, используя ключ и значение пары.
  11. Удаляем все повторяющиеся символы в слове wrd, начиная с последнего и до первого.
  12. Заменяем в исходной строке s подстроку, соответствующую ключу пары, на полученное слово wrd.
  13. Выводим полученную строку s.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы