IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Строки
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


подскажите,а почему неправильно работает следующая весч:
(мне нужно найти в первом предложении самое короткое слово,которого нет во втором)
Код
const
   lim=[#0..#32,'.',',',':',';','!','?','"','+'];
type
   Twords=array[1..40] of string;
var
   i,j,k,n1,n2,nmin,h:byte;
   w1,w2:Twords;
   function GWords(p:string;var w:Twords):byte;
   var
      i,b,n:byte;
   begin
      i:=1;
      n:=0;
      while (i<=length(p)) do begin
        while (i<=length(p)) and (p[i] in lim) do
         inc(i);{+1}
        if i<=length(p) then begin
           b:=i;
           while (i<=length(p)) and not(p[i] in lim) do
            inc(i);
           inc(n);
           w[n]:=copy(p,b,i-b);
        end;
      end;
      GWords:=n;
   end;
begin
   n1:=GWords(p1,w1);//ñîáèðàåì â ìàññèâ ñëîâà 1 ïðåäëîæåíèÿ
   n2:=GWords(p2,w2);//ñîáèðàåì â ìàññèâ ñëîâà 2 ïðåäëîæåíèÿ
   //óäàëÿåì èç ïåðâîãî ìàññèâà ñëîâà,êîòîðûå åñòü âî âòîðîì
   i:=1;
   while (i<=n1) do begin
     j:=1;
     while (j<=n2) and (AnsiLowerCase(w1[i])<>AnsiLowerCase(w2[j])) do inc(j);
     if j<=n2 then begin
              for k:=i to pred(n1) do
              w1[k]:=w1[succ(k)];
              dec(n1);//n1-1
              end
              else inc(i);//i+1
   end;
   //èùåì ñàìîå êîðîòêîå ñëîâî èç îñòàâøèõñÿ
   nmin:=0;
   if n1>0 then begin
           nmin:=1;
           for i:=2 to n1 do
           if w1[i]<w1[nmin] then begin
                             nmin:=i;
                             memo1.Lines.append(w1[nmin]);
                             end;
           end;
end;


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Я же привел тебе работающую программу в "Задачах" зачем было что-то менять ? Если уж надо на делфи то бери эти две строки из мемо или эдитов или откуда тебе надо и делай с ними то же самое !

s1 := Edit1.Text;
s2 := Edit2.Text;

и все.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


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

Сообщение отредактировано: Tribunal -


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Tribunal @ 29.03.2006 6:26) *

она не выводит искомое слово.
В конце у тебя есть сравнение строк. Ты знаешь, как оно работает? Посимвольно. То есть любая строка, начинающаяся с A будет больше любой строки, начинающейся с B.
Прогони вот этот примерчик:
begin
WriteLn('abcdef'>'bc')
end.

- его результат FALSE
Для сравнения длин используй функцию Length(s).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


хорошо.с этим ясно.
нужно теперь выцвести слова заданной длины списком в мемо.
как это сделать?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Tribunal @ 29.03.2006 7:26) *

нужно теперь выцвести слова заданной длины списком в мемо.
как это сделать?

Не совсем ясно, что именно не ясно smile.gif
Как искать слова заданной длины? вроде, должно быть ясно, если ясно предыдущее все..
Как выводить в мемо? вроде, ты это делала..
И что значит - списком? в смысле, пронумеровать?
?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Цитата(lapp @ 29.03.2006 14:35) *

Не совсем ясно, что именно не ясно smile.gif
Как искать слова заданной длины? вроде, должно быть ясно, если ясно предыдущее все..
Как выводить в мемо? вроде, ты это делала..
И что значит - списком? в смысле, пронумеровать?
?

да не то,чтобы пронумеровать,просто мне нужно вывести все слова минимальной длины.
так,как вроде бы должно выводить,выводит лишь последнее такое слово
Код
if nmin>0 then begin
     Memo1.Lines.Append(w1[nmin]);
     for i:=nmin+1 to n1 do
     if length(w1[i])=length(w1[nmin]) then Memo1.Lines.Append(w1[i]);
  end;


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


всё=)
спасибо,Всё нормально=)

последний вопрос....
какие символы входят в диапазон #0..#32 ?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Служебные символы и пробел (#32)


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Tribunal @ 29.03.2006 8:01) *

какие символы входят в диапазон #0..#32 ?

Большинство из них представляется комбинацией <Ctrl-...> в порядке алвафита.
Например, символ <Ctrl-С> имеет номер 3, а <Ctrl-Z> - 26.
У многих из них есть общеупотребительное значение. Например, №13 - перевод строки, №8 - backspace, №26 - конец файла.
Далее, №27 - это ESC.
#0 обычно используется как обозначение конца строки.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
#0 обычно используется как обозначение конца строки.


Это на сколко я знаю не правда, в с/с++ строка символьная завершается нулевым символом, а в паскале

Цитата(Volvo (FAQ))
каждая строка заканчивается символом конца строки (end of line), который представляет собой символ перевода каретки (Chr(13)), за которым, возможно, следует символ перевода строки (Chr(10)).


Это в файле.

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(klem4 @ 29.03.2006 8:39) *

Это на сколко я знаю не правда, в с/с++ строка символьная завершается нулевым символом, а в паскале
Это в файле.

Да, разумеется, я имел в виду не конец строки в файле. Я имел в виду именно С. Бес, как грится, попутал, оффтоп приплел.. sorry sad.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


а,например, "+" , "-" , "*" туда входят ?

полагаю,нет.
а # видимо входит...
так?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Tribunal @ 29.03.2006 11:21) *

а,например, "+" , "-" , "*" туда входят ?

полагаю,нет.
а # видимо входит...
так?

Сначала полагаешь правильно, а потом - не "так" smile.gif
Ты в Widows работаешь? Запусти Пуск - Программы - Аксессуары - System tools - Character map
Там показываются символы, начиная с №33 ($21)

И еще один совет. Если хочешь проверить, что за символ с номером, скажем, 123, сделай так. В любом редакторе: нажми Alt и не отпускай. Набери на цифровой клавиатуре (это справа) 1 2 3 - и отпусти альт. Символ должен появиться в редакторе. Осторожно с символами до 32! если наберешь 27 - будет обычный esc, например.

Еще один hint: сделай простую прогу, которая выдаст тебе табличку символов типа 16х16. Только с первой строчкой в ней будь осторожна...


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 28.06.2017 21:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"