Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Работа со строками

Автор: Relrin 14.12.2010 22:40

Суть задачи следующая: Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв. Между соседними словами – не менее одного пробела, а за последним словом – точка. Напечатать все слова, отличные от последнего слова, преобразовав следующим образом: если слово нечетной длины, то удалить среднюю букву.

Пока не в недоумении как решить задачу... Вот найду я длину строки, как дальше поступать? Что нужно сделать, чтобы "вычленить" последнее слово и после сделать некоторые действия:
1) то, что осталось от строки, сделать преобразования
2) сравнивать новую строку с последним словом
3) как выкручиваться из случаев, когда общее количество символов превышает 255 без подключения каких-либо сторонних модулей?

Пока дошел до этого:


Var
st:string;
a,b: string;
i,j,k: integer;

begin
clrscr;
{Введи последовательность слов}
writeln('Write you words: ');
readln(st);
k:=1;
{Работаем с исходной строкой, пока она больше 0}
while length(st)>0 do
begin
{Ищем те случаи, когда строка оканчивается на пробел или точку}
k:=pos(' ',st);
if k=0 then k:=pos('.',st);
{когда нашли - переносим}
a:=copy(st,1,k-1);
{удаляем слово из последовательности}
delete(st,1,k);
{Если количество букв в слове нечетное - исключаем среднюю букву}
if length(a) mod 2<>0 then
begin
k:=(length(a)div 2)+1;
delete(a,k,1);
end;
end;
{Вывод результата}
for i:=1 to length(a) do
begin
write(a[i]);
end;
readln;
end.


Автор: Relrin 15.12.2010 3:02

Вот к такому виду уже пришел... Задачу я почти сделал... Только я хочу под массив сейчас переделать... Помогите пожалуйста!


Uses
crt;

Var
a: string;
b,c:array [1..100] of string;
i,j,k,n,m,pos,count: integer;

Begin
clrscr;
{Ввод последовательости слов}
readln(a);
i:=length(a)-1;
k:=1;
count:=0;
{Переносим последнее слово в отдельный массив}
while a[i]<>' ' do
begin
inc(count);
b:=b[count]+a[i];
k:=k+1;
i:=pred(i);
end;
{Работаем со оставшейся строкой}
while a[1]<>'.' do
begin
{До момента нахождения пробела с начала строки}
while a[1]=' ' do
delete(a,1,1);
k:=1;
{Как нашли - "вырезаем" это слово и переносим в массив для дальнейшей обработки}
while (a[k]<>' ') and (a[k]<>'.') do
k:=succ(k);
c:=copy(a,1,k-1);
delete(a,1,k-1);
{Работа со словом}
if c<>b then
begin
{Если количество букв нечетное - то удаляем среднюю букву}
if length© mod 2<>0 then
begin
pos:=(length©div 2)+1;
delete(c,pos,1);
end;
{Вывод слова}
for i:=1 to length© do
write(c[i]);write(' ');
end;
end;
readln;
End.



Автор: мисс_граффити 15.12.2010 12:51

Посмотри FAQ - там есть разбиение строки на слова.