Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 25

Найти слова в строке и проверить последовательность букв в словах

03.02.2015, 05:37. Показов 1454. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, не могу понять как написать вот такую программу: есть не пустой текст длинной 255 символов. Для каждого слова, что состоит только из маленьких букв латинского алфавита, выяснить - упорядочены ли его буквы в алфавитном порядке. Если нет - упорядочить буквы такого слова в обратном алфавитном порядке. Буду благодарен если подскажите что и как писать, потому что мне в голову даже алгоритм поиска не приходит.

Добавлено через 9 часов 49 минут
Судя по логике алгоритма код должен быть такой:

Кликните здесь для просмотра всего текста
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
type
  ar=array  of char;
  tmp = array of string;
  
var
  s: string;
  arr:ar;
  temp: tmp;
 
function f(s:string):char;
var 
f: boolean;
k: byte;
i:integer;
begin 
       
      f:=true;
      k:=1;
      while(k<length(temp[i]))and f do
      if temp[k]>temp[k+1] then f:=false
      else k:=k+1;
      if f then writeln(temp[k])
      else write('Буквы не по алфавиту');
end;
      
procedure input(var s: string);
var
  i, z,c: integer;
  j:char;
  
  
begin
  writeln('Enter string:');
  readln(s);
  SetLength(temp, 255);
  z := 1;
  for i := z to pos(' ', s) - 1 do
  begin
      temp[i] := copy(s, z, pos(' ', s) - 1);
    for c:=1 to length(s) do
      f(s);
      delete(s, z, length(s)-(length(s)-pos(' ', s)));
  end;
  inc(z);
end;
 
begin
  input(s);
end.


Но почему-то всё равно не работает.

При этом я так и не понял, можно ли как-то преобразовать string к char для последующего сравнения.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.02.2015, 05:37
Ответы с готовыми решениями:

Нужно в строке удалить слова, состоящие из букв заданного слова
Задание такое: вводится слово и строка (отдельно). Нужно в строке удалить слова, состоящие из букв заданного слова, а остальные слова...

Найти и сохранить в строке те слова, символы которых образуют симметричную последовательность букв
Console.WriteLine(&quot;Введите строку:&quot;); string stroka = Console.ReadLine(); string Words = stroka.Split(' '); //...

Найти в строке те слова, символы которых образуют симметричную последовательность букв (палиндром)
Дана строка. Словом текста считается любая последовательность букв; между соседними словами - не менее одного пробела, за последним...

11
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
03.02.2015, 11:31
Ну, как-то вот так я бы сделал:
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
{$reference System.Core.dll}
uses
  System, System.Linq, System.Collections.Generic;
const
  delimiters = [' ', ',', ':', '.'];
type
  r = KeyValuePair<char, integer>;
  
var 
  arr : array of r;
begin
  var s : string := 'Hello world,, лалала bebe :: finish start'; // ReadString();
  
  arr := (s + ' ').Select((v : char, i : integer) -> new r(v, i)).Where((v : r) -> v.Key in delimiters).Reverse().ToArray();
  for var i : integer := 0 to arr.Length - 2 do
  begin
    var start : integer := arr[i+1].Value + 1;
    var len : integer := arr[i].Value - arr[i+1].Value - 1;
    var sub : string := s.Substring(start, len);
    var sorted : string := new string(sub.ToCharArray().Where((ch : char) -> ch in ['a' .. 'z']) .OrderBy((ch : char) -> ch).ToArray());
    if (sorted.Length = sub.Length) and (sorted <> sub) then 
    begin
      Delete(s, start + 1, len); 
      Insert(ReverseString(sorted), s, start + 1);
    end;
  end;
  writeln(s);
end.
, в результирующей строке во всех словах, которые состоят только из строчных латинских букв, и при этом эти буквы не упорядочены по возрастанию, символы сортируются в обратном алфавитном порядке...
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.02.2015, 13:34
Цитата Сообщение от volvo Посмотреть сообщение
Select((v : char, i : integer)
Здесь вроде опечатка, после char нужно ;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
03.02.2015, 14:35
Цитата Сообщение от Puporev Посмотреть сообщение
после char нужно ;
Нет, это .NET-овская фишка, тут как в Шарпе, запятая...
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.02.2015, 14:39
А у меня .net отказался принимать запятую, пришлось заменить.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
03.02.2015, 14:46
Это в .NET4, скорее всего. Там можно вообще не указывать типы в лямбдах:
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
{$reference System.Core.dll}
uses
  System, System.Linq, System.Collections.Generic;
const
  delimiters = [' ', ',', ':', '.'];
type
  r = KeyValuePair<char, integer>;
  
var 
  arr : array of r;
begin
  var s : string := 'Hello world,, лалала bebe :: finish start'; // ReadString();
  
  arr := (s + ' ').Select((v, i) -> new r(v, i)).Where(v -> v.Key in delimiters).Reverse().ToArray();
  for var i : integer := 0 to arr.Length - 2 do
  begin
    var start : integer := arr[i+1].Value + 1;
    var len : integer := arr[i].Value - arr[i+1].Value - 1;
    var sub : string := s.Substring(start, len);
    var sorted : string := new string(sub.ToCharArray().Where(ch -> ch in ['a' .. 'z']) .OrderBy(ch -> ch).ToArray());
    if (sorted.Length = sub.Length) and (sorted <> sub) then 
    begin
      Delete(s, start + 1, len); 
      Insert(ReverseString(sorted), s, start + 1);
    end;
  end;
  writeln(s);
end.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.02.2015, 15:01
Да у меня NET4. Хотя в этом коде ругается на new r(v, i), нельзя преобразовать тип char к integer;
Написал наугад так: new r(v, ord(i)), заработало...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
03.02.2015, 15:04
Странно, WDE нормально компилирует вышеприведенный код...
0
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 25
03.02.2015, 15:09  [ТС]
Спасибо, всё заработало. Правда у меня появилось несколько вопросов прямо не относящихся к задаче:
1. Как называется вот этот оператор (процедура, функция) "->"? Потому что я думал про его использование, но никак не мог найти его применения в гугле (так как не знаю точно названия);
2. Как называются, например, вот такие конструкции var start : integer := arr[i+1].Value + 1;?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.02.2015, 15:13
Да, там компилирует нормально и твой и мой вариант...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
03.02.2015, 15:47
Цитата Сообщение от LexzCQ Посмотреть сообщение
Как называется вот этот оператор (процедура, функция) "->"?
Лямбда. Вот немного информации по ним: http://pascalabc.net/downloads/Lambda2013.pdf
Цитата Сообщение от LexzCQ Посмотреть сообщение
Как называются, например, вот такие конструкции
Обычная работа с записями. В данном случае - обращение к полю записи
0
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 25
03.02.2015, 15:50  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Лямбда. Вот немного информации по ним: http://pascalabc.net/downloads/Lambda2013.pdf
Спасибо огромное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.02.2015, 15:50
Помогаю со студенческими работами здесь

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

В строке слов из букв латинского алфавита найти слова, в которых нет букв, которые повторяются.
В строке слов из букв латинского алфавита найти слова, в которых нет букв, которые повторяются.

Найти последовательность букв в строке
Имеется строка: UAAUGCUAGACGUGUUCUAGGA В этой строке хранится последовательность кодонов. Кодо́н (кодирующий тринуклеотид) —...

Подсчет букв в словах в строке
Дана строка, в которой слова разделены одним пробелом. Подсчитайте, сколько букв 'a' встречается в каждом слове.

Проверить чередование гласных и согласных букв в словах строки
«Вывести те слова данной строки, которые отличны от последнего слова и при этом выполняется условие - гласные буквы чередуются с...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru