Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 3
Регистрация: 06.10.2013
Сообщений: 29
1

Поменять местами подстроки минимальной и максимальной длины

21.10.2013, 01:07. Просмотров 1199. Ответов 5
Метки нет (Все метки)

Дана строка длиной не более 40 символов. Строка разделена точками на подстроки. Поменять местами подстроки минимальной и максимальной длины.
Я немного не понимаю, сделал счетный цикл, проходящий по всем символам строки, нахожу я там определенную подстроку, записываю ее значение как максимальное, и далее ее сравниваю со следующей подстрокой, как найти первую я понял, делал через copy (st 'главная строка' , 1 , s[i]' значение ,') но вот как найти следующую и записать ее мне не понятно.
счетный цикл for i:=1 to length(st) был .
очень буду рад если поможете)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2013, 01:07
Ответы с готовыми решениями:

Поменять местами слово максимальной и минимальной длины.
Поменять местами слово максимальной и минимальной длины. строки char*. Как это можно сделать? Слова...

Поменять местами слова максимальной и минимальной длины в строке
Задание: Дана строка. Подсчитать количество символов в каждом слове. Сформировать новую строку,...

Определить в предложении слова максимальной и минимальной длины и поменять их местами. C
Доброе время суток!:) Уважаемы программисты, помогите, пожалуйста решить задачу: Дана строка...

Строка содержит одно слово максимальной и одно минимальной длины. Поменять их местами.
Строка содержит одно слово максимальной и одно минимальной длины. Поменять их местами. Помогите...

5
Заблокирован
21.10.2013, 04:05 2
Ну во-первых. copy тут ни к чему.
строка это массив, поэтому...
Delphi
1
2
3
4
5
6
7
var
ss:char;
//~~~~~~~~~~~~~~~~~~~~~~~~
for i:=1 to length(st) do begin
//Строка массив и работаем с ней, как с массивом
ss:=st[i];
                                 end;
Добавлено через 29 минут
В общем вам нужно ещё 4 переменных
max min
maxpos minpos
инициализируем их нулями

Начинаем читать сканируем строку до запятой, получили длину сова,
если max и min равны нулю, это значит. что это первое слово и присваиваем этим перменным его длину.

Потом цикл идёт дальше и опять ищем запятую, попутно подсчитывая длину.
Запятая есть, это новая длина. Поскольку это уже не первое слово, сравниваем его длину с переменными
max и min
Если текущая длина больше max, то присваиваем её этой перменной, заодно в maxpos запоминаем позицию начала этого слова. Для этого должна быть ещё одна переменная. Она запоминает начало каждого слова и присваивается переменным maxpos или minpos если это надо.
Ну а если текущая длина меньше min, всё делается аналогично.
и продолжается всё опять до конца. В результате получим максимальную и минимальную длину слова, и их позиции.
Ну а далее дело техники.
Копируем длинное и короткое слово в переменные. Потом, то что было последним. уничтожаем процедурой Delete
и вставляем новое слово процедурой Insert
И теперь повторяем тоже самое для того, что вначале. Вот и всё.
Правда один момент. При сканировании надо учитывать и конец строки. Поэтому лучше всего намеренно поставить в конец запятую. Этим избежим лишних проблемм. Даже если в конца запятая была, это не окажет влияния на подсчёт.
Вот в принципе вкратце и всё.
1
1 / 1 / 3
Регистрация: 06.10.2013
Сообщений: 29
05.11.2013, 22:00  [ТС] 3
Delphi
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
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
   const d = (',');
 var
   a: array[1..40] of string;
st,ss:string[40];
i,imin,imax,minpos,maxpos:Integer;
begin
  Writeln('vvesti strok');
  Readln(st);
  Writeln(st);
  imin:=1;
  imax:=1;
  for i:=1 to length(st) do
    while (a[i]<>d) do
      begin
      if a[i]>a[imax] then imax:=i;
      if a[i]<a[imin] then imin:=i;
      end;
st:=a[imax];
a[imax]:=a[imin];
a[imin]:=st;
for i:=1 to Length(st) do
st:=st+a[i];
writeln(st);
readln;
end.
расписал, но все равно не работает
0
835 / 730 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
05.11.2013, 23:28 4
Как установить его, компонент трея у меня не установился.
0
1 / 1 / 3
Регистрация: 06.10.2013
Сообщений: 29
06.11.2013, 01:30  [ТС] 5
Что установить?
0
1 / 1 / 3
Регистрация: 06.10.2013
Сообщений: 29
20.11.2013, 00:44  [ТС] 6
Delphi
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
50
51
52
53
54
55
56
57
58
59
60
61
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 var
   a: array[1..40] of string;
st,stmin,stmax,st1:string[40];
fpos,i,imin,imax:Integer;
n:Byte;
begin
  Writeln('vvesti strok');
  Readln(st);
  imin:=40;
  imax:=-1;
  if st[length(st)]<>'.' then begin st:=st+'.' ; st1:=st; end;
  while length(st)<>0 do
      begin
      fpos:=Pos('.',st);
      if fpos<imin then begin imin:=fpos ;stmin:= Copy(st,1,fpos); end;
      if fpos>imax then begin imax:=fpos; stmax:= Copy(st,1,fpos); end;
      delete(st,1,fpos);
      end;
      if Pos(stmin,st1)>Pos(stmax,st1) then
      begin
        n:=Pos(stmin,st1);
         while n>0 do
        begin
          Delete(st1,n,Length(stmin));
          Insert(stmax,st1,n);
          n:=Pos(stmin,st1);
        end;
        n:=Pos(stmax,st1);
        begin
          delete(st1,n,length(stmax));
          insert(stmin,st1,n);
          n:=pos(stmax,st1);
        end;
        end
        else
        begin
        n:=Pos(stmax,st1);
         while n>0 do
        begin
          Delete(st1,n,Length(stmax));
          Insert(stmin,st1,n);
          n:=Pos(stmax,st1);
        end;
        n:=Pos(stmin,st1);
        begin
          delete(st1,n,length(stmin));
          insert(stmax,st1,n);
          n:=pos(stmin,st1);
        end;
        end;
Writeln(stmin);
Writeln(stmax);
Writeln('novaya   ',st1);
readln;
end.
совершенно не оптимизированный, но зато точно работающий)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2013, 00:44

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

Поменять местами слова с максимальной и минимальной длиной
Здравствуйте, нужно решение задачи: Поменять местами слова с максимальной и минимальной длиной при...

Поменять местами серии с минимальной и максимальной длиной
Задан целочисленный массив размером N. Поменять местами серии с минимальной и максимальной длиной....

Поменять местами серии массива с максимальной и минимальной длиной
Задан целочисленный массив размера N. Поменять местами серии с максимальной и минимальной длиной....

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


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

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

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