Оставить в строке только первое и последнее вхождение цифр каждого слова - 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 реализована задача по обработке строки, в которой необходимо оставить только первое и последнее вхождение цифр каждого слова. Список переменных и их значений:
- L - список пар ключ-значение, где ключ - позиция первого вхождения цифры слова, а значение - длина слова.
- s - исходная строка, содержащая цифры.
- wrd - текущее слово, найденное в строке. Последовательность выполнения кода:
- Инициализация пустого списка L.
- Проход по каждому символу строки s.
- Если текущий символ является пробелом или равен последнему символу строки, то добавляем в список L пару ключ-значение, где ключ - позиция следующего символа (с учетом добавления пробела в конце строки), а значение - длина текущего слова wrd.
- Обновляем текущее слово wrd, добавляя в него текущий символ.
- После прохода по всем символам строки, переворачиваем список L, чтобы получить список пар ключ-значение в обратном порядке.
- Проход по каждой паре ключ-значение из списка L.
- Получаем текущее слово wrd, используя ключ и значение пары.
- Удаляем все повторяющиеся символы в слове wrd, начиная с последнего и до первого.
- Заменяем в исходной строке s подстроку, соответствующую ключу пары, на полученное слово wrd.
- Выводим полученную строку s.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д