Помощь - Поиск - Пользователи - Календарь
Полная версия: задачка на строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Ученик
кароче
Найти самое длинное слово в предложении, преобразовать его в предложении - поменять порядок следования букв на обратный.
Вот чо у меня вышло

var
a,so:string[30];
c,b,i,k:integer;
buf:char;
begin
readln(so);
writeln(so);
a:='';
for i:=1 to length(so) do begin
inc(k); if (so[i]=' ') or (i=length(so)) then begin
if length(copy(so,i-k+1,k))>length(a) then a:=copy(so,i-k+1,k); k:=0;
end;
end;
writeln(a);
c:=length(a);
b:=pos(a,so);
k:=1;
for i:= b to b+(c div 2) do begin
inc(k);
buf:=so[i];
so[i]:=so[b+c-k];
so[b+c-k]:=buf;
end;
writeln(so);
readln;
end.

прастите не умею оформлять их
М
- выдели код блоком и выбери нужный пункт в меню CODE над окном ввода
Lapp



1)как сделать штобы в длину слов не входили запятые или точки?
2)упростить какнить можно?(меня терзают сомнения, што я наворотил лишнего)
Спасибо
Lapp
Цитата(Ученик @ 23.12.2008 0:17) *
1)как сделать штобы в длину слов не входили запятые или точки?
Сделай множество символов и присвой ему значения всех разделителей:
var
Separators: set of char;
...
Separators:=[' ',',','.','!','?',';',':']; // добавь сам, что еще нужно

Дальше, вместо сравнения с пробелом вставь проверку на наличие в этом множестве:
if (so[i] in Separators) or (i=length(so)) then


Добавлено через 7 мин.
Можно наоборот, проверять не является ли сивол разделителем, а является ли он буквой. Это тоже можно сделать через множество.

var
Letters: set of char;
...
Letters:=['A'..'Z']+['a'..'z'];
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.