Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Подсчет слов в строке

Автор: Atreides 23.11.2008 23:08

задачка попалась по реализации метода подсчета слов в строке, а вот как реализовать? Была идея поисков пробелов в строке + 1, но как можно найти пробелы в строке?

Автор: Lapp 24.11.2008 12:42

Цитата(Atreides @ 23.11.2008 19:08) *
но как можно найти пробелы в строке?

Видимо, я что-то не понимаю. А проверка на s[i]=' ' в цикле до длины строки не покатит?

Автор: volvo 24.11.2008 13:11

Цитата
Была идея поисков пробелов в строке + 1
Не самая удачная идея:

& quot;Вот___тебе___пример,_который___это___подтвер
дает"
(пробелы заменены подчеркиваниями) Сколько слов? А пробелов? Слова, кстати, могут разделяться не только пробелами (обратного утверждения в условии тоже нет)

Автор: Unconnected 24.11.2008 19:32

Если предположить, что слова разделяются пробелами, то можно использовать например:

Код

if (s[i]=' ') and (s[i+1]<>' ') then schetchik_slov:=schetchik_slov+1;


Добавлено через 16 мин.
Вот программа, могущая работать с большим количеством разделителей. В качестве разделителя могут быть пробел и символ _ . Можно использовать оба, но между двумя словами может быть только один вид разделителя.
Код
var s:string;
    a,b:integer;
begin
  writeln('Введите строку');
  readln(s);
  for a:=1 to length(s) do
  begin
    if (s[a]=' ') and (s[a+1]<>' ') then b:=b+1;
    if (s[a]='_') and (s[a+1]<>'_') then b:=b+1;
  end;
  b:=b+1;
  writeln('В строке ', b ,' слов.');
  readln;
end.

Автор: Lapp 24.11.2008 19:53

Цитата(Unconnected @ 24.11.2008 15:32) *
if (s[i]=' ') and (s[i+1]<>' ') then schetchik_slov:=schetchik_slov+1;
Если это полноценный текст, то есть еще такие вещи как, например, тире, которые обрамлены пробелами.. Кроме того, между абзацами пробелов нет. Не нужно подменять одну задачу другой. Надо считать слова - считай слова. Вопрос изучен достаточно хорошо: http://forum.pascal.net.ru/index.php?showtopic=6972

Автор: Atreides 24.11.2008 21:39

Все разобрался. Всем спасибо!