Задача такая:
Вводится произвольный текст в строку. Вывести слова из строки, которые не повторяются. Под словом считать набор символов, разделенный от другого одним или несколькими пробелами.
Т.е. если строка "сын мама папа мама", вы вывести прога должна "сын" и "папа"...
Я делаю так - вводится текст, записывается в строку S, далее в цикле ищу слово, сохраняю его в Slovo, а оставшуюся строку сохраняю в S1. Проверяю, если pos(Slovo,S1)=0 - вывожу слово, иначе - новая итерация.
В результате выводится полнейший бред...
Помогите, пжлст! В понедельник надо показать задачу...
Алгоритм рабочий (за исключением некоторых мелочей), показывай реализацию...
Вот текст проги:
program stroki;
uses CRT;
var S,S1,Slovo: string;
i,j,K: integer;
begin
clrscr;
write('Введите строку: ');
readln(S);
K:=length(S);
writeln;
{убираем лишние пробелы между слов}
for i:=1 to K do
begin
if (S[i]=' ') and (S[i+1]=' ') then
begin
delete(S,i+1,1);
dec(i);
end;
end;
writeln('Неповторяющиеся слова:');
writeln;
j:=1; {номер начала нового слова}
for i:=1 to K do
begin
if S[i]=' ' then
begin
Slovo:=copy(S,j,i-j);
S1:=copy(S,i+1,K-i);
if pos(Slovo,S1)=0 then writeln(Slovo);
j:=i+1;
end;
end;
readkey;
end.
Во-первых, ты изменяешь параметр цикла внутри самого цикла, что нельзя делать - исправляй...
Во-вторых, я говорил, что есть некоторые мелочи, которые надо исправить? Вот это, например:
...
if S[i]=' ' then
begin
Slovo:=copy(S,j,i-j);
{ S1:=copy(S,i+1,K-i); } { <--- Вместо этого - следующие 2 строки }
S1 := s;
Delete(s1, j, i - j);
if pos(Slovo,S1)=0 then writeln(Slovo);
j:=i+1;
end;
...
varВ результате - "son father"
S, S1, Slovo: string;
i,j,K: integer;
begin
s := 'son mother mother father';
K := length(S);
writeln;
{ Это я не изменял, просто закомментировал для теста }
for i:=1 to K do begin
if (S[i]=' ') and (S[i+1]=' ') then begin
delete(S,i+1,1);
dec(i);
end;
end;
s := s + ' ';
writeln('Неповторяющиеся слова:');
writeln;
j:=1;
for i:=1 to K do begin
if S[i]=' ' then begin
Slovo:=copy(S,j,i-j);
S1 := s;
delete(s1, j, i - j);
if pos(Slovo,S1)=0 then writeln(Slovo);
j:=i+1;
end;
end;
readln;
end.
Теперь идеально работает! Спасибо!
А с изменением параметра цикла - компилируется и работает
от компилятора зависит...
но даже если пропускает - это неблагородно... лучше таким не заниматься.