0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 7
1

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

16.03.2016, 01:12. Показов 1503. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана строка s, оставить в ней только первое и последнее вхождение цифр каждого слова, распечатать строку.
Тоисть на вход 10001 555111, на выходе должно быть 1001 5511
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2016, 01:12
Ответы с готовыми решениями:

Оставить в строке только первое вхождение каждого символа. Взаимный порядок оставленных символов сохранить
Решил данную задачу так: //Оставить в строке только первое вхождение каждого символа. Взаимный...

Дана строка, состоящая из слов, оставить только последнее вхождение каждого слова
Дана строка, состоящая из слов оставить только последнее вхождение каждого слова

Оставить в слове только первое и последнее вхождение каждой буквы
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Множества: Оставить в строке только последнее вхождение символа
Оставить в строке только последнее вхождение символа, взаимный порядок. например мама мыла раму-ыл...

2
5065 / 2637 / 2348
Регистрация: 10.12.2014
Сообщений: 10,003
16.03.2016, 08:08 2
Лучший ответ Сообщение было отмечено markcod3 как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
begin
  var S := ReadLnString('S =');
  var W := S.ToWords; // Разбить на отдельные слова
  S := '';
  for var i := 0 to W.Length-1 do
    begin
      for var c := #48 to #57 do // Каждую цифру поотдельности
        begin
          var f := W[i].IndexOf(c) + 1; // Позиция цифры слева
          var l := W[i].LastIndexOf(c) + 1; // Позиция цифры справа
          if (f > 0) and (l > f) then // Встречается цифра и не менее двух раз
            begin
              W[i][f] := #0; W[i][l] := #0; // Заменим перую и последнюю на подстановочный символ
              W[i] := W[i].Replace(c, '').Replace(#0, c); // Удалим все остальные и вернём подстановочные
            end;
        end;
      S += #32 + W[i]; // Соберём строку заново
    end;
  S := S.TrimStart(#32);
  WriteLn('S = ' + S);
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32628 / 21095 / 8139
Регистрация: 22.10.2011
Сообщений: 36,358
Записей в блоге: 8
16.03.2016, 11:46 3
Лучший ответ Сообщение было отмечено markcod3 как решение

Решение

Чтобы не терять разделители между словами (мало ли, будет в строке три пробела вместо одного) - делаем вот так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2016, 11:46
Помогаю со студенческими работами здесь

В каждой строке для всех слов, которые встречаются в строке больше одного раза, оставить только первое вхождение
Народ, помогите Нужно в каждой строке для всех слов, которые встречаются в строке больше одного...

От каждого слова в строке оставить только первые 3 буквы.
Дана строка. От каждого слова оставить только первые 3 буквы. Например, вводим &quot;мама мыла раму&quot;,...

В списке L оставить только первое вхождение группы одинаковых элементов
Здравствуйте. Помогите пожалуйста решить задачу: В списке L оставить только первое вхождение...

Функция удаляющая первое и последнее вхождение в строке заданного символа
Функция удаляет первое и последнее вхождение в строке заданного символа.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru