Консультация № 154275
14.12.2008, 09:04
0.00 руб.
0 7 1
Даны натуральное число n, символы S1,...,Sn. Известно, что среди данных символов есть хотя бы один, отличный от пробела. Требуется преобразовать последовательность S1,...Sn следующим образом: удалить группы пробелов, которыми начинается и которыми заканчивается последовательность, а также заменить каждую внутреннюю группу пробелов одним пробелом. Если указанных групп нет в данной последовательности, то оставить последовательность без изменений.

Обсуждение

давно
Профессор
401888
1232
14.12.2008, 09:43
общий
это ответ
Здравствуйте, Иванов Виктор!
Решение в приложении.

Приложение:
uses crt;
const n=30;
var s:string[n];
i,k:integer;
begin
clrscr;
k:=0;
repeat {вводим строку и проверяем правильность ввода}
writeln('Vvedite posledovatelnost iz 30 simvolov, vkluchaushyu probely:');
readln(s);
for i:=1 to length(s) do
if s[i]=' ' then k:=k+1;
if k=0 then writeln('Probelov net!. Povtorite vvod.'){если нет пробелов}
else if k=length(s){если все пробелы} then writeln('Posledovatelnost soderzit tolko Ppobely!. Povtorite vvod.');
until (k>0)and(k<length(s));
i:=1;
while s[i]<>' ' do {пока в начале строки пробелы, удаляем их}
begin
delete(s,1,1);
inc(i);
end;
i:=length(s);
while s[i]<>' ' do {то же с конца}
begin
delete(s,1,1);
dec(i);
end;
while pos('--',s)>0 do {пока в оставшейсе строке есть два пробела сподряд(-- пробелы)}
delete(s,pos('--',s),1);{обязательно в кавычках по два пробела}
write(s);
readln
end.
давно
Профессор
401888
1232
14.12.2008, 10:00
общий
Вы сначала проверяйте работу программ, а потом оценки ставьте, могут ведь быть и ошибки. Все мы люди.
Неизвестный
14.12.2008, 10:03
общий
Хорошо... но вы же специалист, вы меня так выручаете, спасибо вам!
давно
Старший Модератор
31795
6196
14.12.2008, 21:29
общий
Юрий Борисович:
Зачем всё так запутывать, всё намного проще:
Код:

{удаляются двойные пробелы где бы они не стояли, в начале, в конце или где-то в средине}
whlie pos(' ',s)>0 do
delete(s,pos(' '),1);
{если есть начальный пробел-удаляем; если были одни пробелы длина строки будет равна 1}
if s[1]=' ' then delete(s,1,1);

после этого кода если строка состояла из одних пробелов, её длина будет нулевой, и нужно повторять ввод.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Профессор
401888
1232
15.12.2008, 10:24
общий
Вот за что не люблю лазить в задачи на строки, вечно что-нибудь напартачу.
давно
Посетитель
400963
1
01.03.2017, 17:23
общий
У меня ошибка на 23 строке: Индекс находился вне границ массива
давно
Старший Модератор
31795
6196
01.03.2017, 17:39
общий
Адресаты:
Задайте новый вопрос, покажите код.
Зачем трупик из архива подымать?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа