Помощь - Поиск - Пользователи - Календарь
Полная версия: в строке подсчитать количество слов которые одинаково начинаются и заканчиваются!?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
PORTUGAL
Здравствуйте! Сейчас решаю задачи по паскалю и застрял вот на чем: во введенной строке нужно подсчитать количество слов которые одинаково начинаются и заканчиваются, как это реализовать?
volvo
Здесь: Разбиение на слова. Все способы найдешь алгоритм выделения слов из строки...

Дальше - просто пройдешь по массиву, и проверишь каждое слово на то, подходит оно под условие, или нет... (Кстати, уточни, сколько символов должны совпадать в начале и конце слова, чтобы считалось, что оно начинается и заканчивается одинаково?)
PORTUGAL
Вот как я решил:
Код

var st,sl:string;
    i,n,beg,kol:byte;
BEGIN
write('Vvedite stroku: ');
readln(st);
beg:=1;
for i:= 1 to length(st) do
  begin
   if (st[i]=' ') or ((st[i]='.'))
   then
    begin
     sl:=copy(st,beg,i-beg);
     if sl[1]=sl[length(sl)]
     then inc(kol);
     beg:=i+1;
    end;
end;
writeln('Kolichestvo slov: ' ,kol);
readln;
end.


Нормально?
PORTUGAL
Тут возникла у меян проблема с этим кодом, суть ее вот в чем – программа работает нормально, если ввести два слова с одинаковыми буквами в начале и конце то выдает что их два, но если не поставить в конце предложения точку то пишет что слово только одно! Т.е. если не ввести точку то она подсчитывает все слова с одинаковым началом и концом кроме последнего слова в строке! Не могу понять в чем проблема!?
klem4
uses crt;
var
s : string;
i,back,count : byte;

begin
clrscr;
readln(s);
i := 1;
count := 0;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i]=' ') do inc(i);
if (i <= length(s)) then begin
back := i;
while(i<=length(s)) and (s[i] <> ' ') do inc(i);
if s[pred(i)] = s[back] then inc(count);
end;
end;
writeln('count = ',count);

readln
end.

volvo
Цитата
Не могу понять в чем проблема!?
Ну, как же, у тебя слово ограничивается ТОЛЬКО пробелом или завершающей точкой, если последним символом строки точки не будет, то последнее слово просто не анализируется, т.к.
   if (st[i]=' ') or ((st[i]='.')) then begin
{ сюда программа просто не заходит ... }
sl:=copy(st,beg,i-beg);
if sl[1]=sl[length(sl)] then inc(kol);
beg:=i+1;
end;


измени цикл вот так, все должно работать:
for i:= 1 to length(st) do begin

if (st[i]=' ') or ((st[i]='.')) or (i = length(st)) then begin
if i = length(st) then sl := copy(st, beg, 255)
else sl:=copy(st,beg,i-beg);

if sl[1]=sl[length(sl)] then inc(kol);
beg:=i+1;
end;

end;


или еще проще:
write('Vvedite stroku: '); readln(st);
if st[length(st)] <> '.' then st := st + '.';
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.