• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

[pascal] Ошибка в работе программы

  • Автор темы Wefast
  • Дата начала
W

Wefast

Программа должна находить самое короткое слово, и удалять лишние пробелы. Так вот если ввести много пробелов в начале, потом слово , потом пробелы, а потом слово опять , то он не выводит самое короткое слово.
Код:


Код:
uses crt;
var s,s1,s2,s3:string;
mx,mn:byte;
begin
clrscr;
textcolor(White);
write('Строка: ');
readln(s);
s:=s+' ';{добавление пробела в конец}
while pos(' ',s)>0 do{удаляем лишние пробелы, пока есть 2 пробела рядом}
delete(s,pos(' ',s),1);{1 удаляем}
mx:=0;mn:=255; {начальное значение}


textcolor(red);
writeln;
writeln('Строка без лишних пробелов: ',s);
while pos(' ',s)>0 do{пока есть пробел в строке}
begin
s1:=copy(s,1,pos(' ',s)-1);{копируем первое слово до пробела}
if length(s1)<mn then{если меньше всех}
begin
mn:=length(s1); {самая маленькая длина}
s2:=s1;	 {запоминаем слово}
end;
delete(s,1,pos(' ',s));{удаляем это слово следующее будет первым}
end;
textcolor(green);
writeln('Самое короткое слово ',s2);
readln
end.
 
H

hosm

Так вот если ввести много пробелов в начале, потом слово , потом пробелы, а потом слово опять , то он не выводит самое короткое слово.
так как пробел - первый символ строки.
Выбирайте:
1) можно добавить условие проверки s1<>"" внутри цикла.
2) проверить позицию пробела, если строка начинается с пробела, то не обрабатывать как слово, а просто его удалить:
Код:
while pos(' ',s)>0 do{пока есть пробел в строке}
begin
if pos(' ',s) > 1 then // пробел не первый
begin
s1:=copy(s,1,pos(' ',s)-1);{копируем первое слово до пробела}
if length(s1)<mn then{если меньше всех}
begin
mn:=length(s1); {самая маленькая длина}
s2:=s1;	 {запоминаем слово}
end;
end;
// тут первый пробел должен удалиться
delete(s,1,pos(' ',s));{удаляем это слово следующее будет первым} 
end;
 
V

vital

топискстартер, слушай умную тетю, она в уме паскалевский код компилировать умеет)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!