Выделить слова из текста и каждое слово записать в соответствующий элемент массива

IX

Задача: "Дана строка. Считаем ее отрывком текста. Группы символов, разделенных одним или несколькими пробелами, назовем словом. Пробелы могут находиться как в начале текста, так и в конце. Требуется выделить слова из текста и каждое слово записать в соответствующий элемент массива." выдает ошибку " ошибка 256 выход за границы диапазона изменения индекса"
var a:array [1..100] of string;
s:string;
 i,x,n,j:integer;
begin
read(s);
x:=1;
for i:=0 to 255 do
if (s[i]=' ') and (s[i+1]<>' ') then begin   j:=i;
repeat
j:=j+1;
n:=n+1
until s[j]=' ';
a[x]:= copy (s,i+1,n);
x:=x+1;
end;
for i:=1 to x do
write (a[i],'/');
End.
3 ответа

IX

uses crt;
var a:array [1..100] of string;
    s:string;
    i,x,n,j:integer;
begin
readln(s); s:=' '+s+' ';
x:=1; n:=0;
for i:=0 to length(s)-1 do
if (s[i]=' ') and (s[i+1]<>' ') then
   begin
   j:=i;
   repeat
   j:=j+1;
   n:=n+1;
   until s[j]=' ';
   a[x]:= copy (s,i+1,n);
   x:=x+1; n:=0;
   end;
for i:=1 to x-1 do
write (a[i],'/');
End.


IX

в принципе коды отличаются только
s:=' '+s+' '
что вы поменяли? скажите, пожалуйста. не понимаю значения этой строки.


IX

IX, вы в качестве проверки "одно слово / следующее слово" используете пробел. но пробела нет в начале строки и в конце строки, таким образом, первое и последнее слово выпадает из поля зрения программы. но это не единственное и не главное измененение, а главное - вот
n:=0;
n у вас - это количество символов, которые надо скопировать из строки, чтобы получить слово. поскольку отсчет начинается с первого символа и не обнуляется после обнаружения слова, ваша программа пытается скопировать количество символов, выходящее за пределы размеров как самой строки, так и вообще диапазона byte