Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
1

Удалить из последовательности символов S все слова, оканчивающиеся группой букв, "кая" или "кое"

03.12.2014, 10:35. Просмотров 1773. Ответов 6
Метки нет (Все метки)

Даны натуральное число n, символы S1,... Sn. Будем рассматривать слова,
образованные символами, входящими в последовательность S1,... Sn группы символов, разделенные одним или несколькими пробелами, назовем словами.
Удалить из S1,... Sn все слова, оканчивающиеся группой букв, "кая"
или "кое".
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2014, 10:35
Ответы с готовыми решениями:

В чем ошибка? Когда печатаю "а" или "б" все работает, а когда "А" или "Б" то он не меняет "А" на "Б"
{Программа заменяет буквы "а" на буквы "б" в введенном тексте} var stroka : string; i :...

Дан текст. Определить все слова оканчивающиеся на "ая". PascalABC.net
Задача №18 Дан текст. Определить все слова оканчивающиеся на "ая".

Составьте программу замены в слове Х всех букв "а" и "я" на слог "по"
Составьте программу замены в слове Х всех букв "а" и "я" на слог "по". заранее спасибо!

Выяснить, каких букв ("а" или "б") в слове Х больше
составьте программу, выясняющую, каких букв (а или б) в слове Х больше Помогите, пожалуйста.

6
Эксперт Pascal/Delphi
2351 / 1272 / 1481
Регистрация: 29.08.2014
Сообщений: 4,586
03.12.2014, 14:39 2
если без массива S[1..N], то можно так:
Pascal
1
2
3
4
5
6
7
begin
  var l:=new list<string>;
  var lnew:=new list<string>;
  l:=ReadString().Split(' ').ToList();{читаем строку с клавиатуры произвольной длины, разбиваем на слова не удаляя повторы пробелов и присваиваем ее списку}
  foreach s:string in l do if (pos('кая',s)<>length(s)-2) and (pos('кое',s)<>length(s)-2) then lnew.add(s);{проходим по списку и слова с окончаниями кая и кое пропускаем, остальные в новый список}
  foreach s:string in lnew do write(s+#32);{выводим полученную последовательность на экран}
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30599 / 19972 / 7801
Регистрация: 22.10.2011
Сообщений: 34,772
Записей в блоге: 6
03.12.2014, 15:15 3
Pascal
1
2
3
4
5
6
7
8
{$reference System.Core.dll}
uses System, System.Linq;
 
begin
  foreach var st : string in 
    ReadString().Split('  '.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).
    Where((x : string) -> not(x.EndsWith('кая') or x.EndsWith('кое'))) do write(st + ' ');
end.
0
Эксперт Pascal/Delphi
2351 / 1272 / 1481
Регистрация: 29.08.2014
Сообщений: 4,586
03.12.2014, 15:50 4
volvo, я понял, что многократные вхождения пробелов тут удалять не надо, только слова
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30599 / 19972 / 7801
Регистрация: 22.10.2011
Сообщений: 34,772
Записей в блоге: 6
03.12.2014, 19:40 5
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Ну, тогда, если через Linq - будет так:
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
{$reference System.Core.dll}
uses
  System, System.Linq;
 
type
  r = 
  record
    val : char;
    ix : integer;
    constructor create(avalue : char; aindex : integer);
    begin val := avalue; ix := aindex end;
  end;
  
var 
  arr : array of r;
begin
  var s : string := 'маша ела кашу   какая умница    мама ела жаркое'; // ReadString();
  arr := (s + ' ').Select((v : char, i : integer) -> new r(v, i)).Where((v : r) -> v.val = ' ').Reverse().ToArray();
  for var i : integer := 0 to arr.Length - 2 do
  begin
    var start : integer := arr[i+1].ix + 1;
    var len : integer := arr[i].ix - arr[i+1].ix - 1;
    var sub : string := s.Substring(start, len);
    if sub.EndsWith('кое') or sub.EndsWith('кая') then s := s.Remove(start, len);
  end;
  writeln(s);
end.
0
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
04.12.2014, 16:41  [ТС] 6
volvo, а можете с комментариями написать? Где и что делает программа?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30599 / 19972 / 7801
Регистрация: 22.10.2011
Сообщений: 34,772
Записей в блоге: 6
04.12.2014, 17:08 7
Основной фрагмент программы - вот этот:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  var s : string := 'маша ела кашу   какая умница    мама ела жаркое'; // ReadString();
  arr := (s + ' ').Select((v : char, i : integer) -> new r(v, i)). // выбираем из строки пары "символ" и "его позиция"
    Where((v : r) -> v.val = ' '). // Отсеиваем только те пары, где символ - пробел, нас остальные не интересуют
    Reverse(). // "Разворачиваем" последовательность этих пар (зачем - поймешь позже)
    ToArray(); // И преобразуем в массив
 
  // теперь у нас в массиве arr хранятся координаты всех пробелов, присутствующих в строке s
  // Используя это, очень просто получить координаты всех слов (это то, что между пробелами),
  // проверить каждое слово на предмет того, оканчивается ли оно на 'кая' или 'кое',
  // и при необходимости - удалить. Итак:
  for var i : integer := 0 to arr.Length - 2 do
  begin
    // начало очередного слова в строке
    var start : integer := arr[i+1].ix + 1;
    // его длина
    var len : integer := arr[i].ix - arr[i+1].ix - 1;
    // само слово
    var sub : string := s.Substring(start, len);
    // проверяем окончание слова, и, при необходимости, удаляем его из исходной строки
    if sub.EndsWith('кое') or sub.EndsWith('кая') then s := s.Remove(start, len);
  end;
// Всё, можно печатать то, что осталось в s...
Теперь должно быть понятно, зачем пришлось "развернуть" последовательность. Удалять слова в строке можно безболезненно только от конца к началу, иначе (если удалять от начала к концу) индексы сбиваются, и следующие слова уже совсем не там, где были до этого...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2014, 17:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Из слова "клоун" путем "вырезок" и "склеек" его букв получить слова "уклон","кулон" и "колун"
Из слова &quot;клоун&quot; путем &quot;вырезок&quot; и &quot;склеек&quot; его букв получить слова &quot;уклон&quot;,&quot;кулон&quot; и...

В заданной последовательности литер, состоящей из букв латинского алфавита и оканчивающейся точкой, определите общее число вхождений букв "a","e", "c", "h".
Немогу написать программу. В заданной последовательности литер, состоящей из букв латинского...

Из слова "клоун" путем вырезок и склеек его букв получить слова "уклон", "кулон" и "колун".
Из слова &quot;клоун&quot; путем вырезок и склеек его букв получить слова &quot;уклон&quot;, &quot;кулон&quot; и &quot;колун&quot;.

Распечатать все слова, в состав которых входят буквы "a", "o" или "и"
Дана строка символов. Группу символов, разделенную с одной или обеих сторон одним или несколькими...

В текстовом файле удалить все символы "+" и "-", а так же все буквы "б" перед которыми находится буква "с".
Дан текстовый файл. В нем удалить все символы &quot;+&quot; и &quot;-&quot;, а так же все буквы &quot;б&quot; перед которыми...

Из слова "вертикаль" путем вырезок и склеек его букв получить слова "тир" и "ветка"
1)Имеется список учащихся класса с указанием роста каждого из них. Выяснить, перечислены ли ученики...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.