Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2015, 18:59   #1
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Сообщение

Всем здравствуйте! Решаю вот такую задачу:

Дана строка, возможно, содержащая пробелы. Определите количество слов в этой строке. Слово — это несколько подряд идущих букв латинского алфавита (как заглавных, так и строчных).

Решение оформите в виде функции CountWords (S), возвращающее значение типа int. При решении этой задачи нельзя пользоваться дополнительными строками и списками.

Ввод
Yesterday, all my troubles seemed so far away

Вывод
8

Если кому интересно, это №111313 на informatics.mccme.ru

И вроде все правильно делаю, а все тесты не проходит...

16 тестов из 22:
Код:
var s:StRing;
    i, n:IntegeR;
    f:bOOlean;
    
begin
  readln(s);
  n:= 0;
  f:= true;
  for i:= 1 to length(s) do
  begin
    if (s[i] <> ' ') and f then inc(n);
    f:= (s[i] = ' ');
  end;
  writeln(n);
end.
17 из 22
Код:
var s:StRing;
    index, count:LongInt;

begin
  readln(s);
  count:= 0;
  if not(s = '') then begin
  index:= 1;
  while (index <= Length(s)) do
  begin
    if not(s[index] in ['A'..'Z', 'a'..'z', ' ']) then Delete(s, index, 1);
    inc(index);
  end;
  while (Pos('  ', s) > 0) do Delete(s, Pos('  ', s), 1);
  if (s[1] = ' ') then Delete(s, 1, 1);
  while (s[Length(s)] = ' ') do Delete(s, Length(s), 1);
  while (Length(s) > 0) do
  begin
    index:= 1;
    while (index <= Length(s)) and (s[index] <> ' ') do inc(index);
    Delete(s, 1, index);
    inc(count);
  end;
  end;
  writeln(count);
end.
Помогите разобраться, пожа-алуйста!

Последний раз редактировалось Stilet; 08.02.2015 в 19:42.
isst вне форума Ответить с цитированием
Старый 08.02.2015, 19:06   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

На фряхе :
Код:
uses StrUtils;
var
	s : string;
begin
	ReadLn(s);
	WriteLn(WordCount(s, StdWordDelims))
end.
Poma][a вне форума Ответить с цитированием
Старый 08.02.2015, 19:11   #3
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Лампочка

Цитата:
Сообщение от Poma][a Посмотреть сообщение
На фряхе :
Код:
uses StrUtils;
var
	s : string;
begin
	ReadLn(s);
	WriteLn(WordCount(s, StdWordDelims))
end.
О-о, Ром, спасибо, ток он проходит 20 из 22
Щас буду разбираться...
isst вне форума Ответить с цитированием
Старый 08.02.2015, 19:11   #4
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Причём здесь Pos.
внешний цикл пока индекс в пределах строки
Два внутренних цикла - пропуск "пробелов и разделителей", пропуск символов слова (СчётчикСлов++).
--------------
Скорее всего Delimiters неприменим, нужно действовать наоборот - с разрешённых символов.

Еще может быть ввод не помещается в 255 символьный тип паскаля. нужна потокавая обработка.

Последний раз редактировалось Stilet; 08.02.2015 в 19:48.
FPaul вне форума Ответить с цитированием
Старый 08.02.2015, 19:42   #5
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Лампочка

Цитата:
Сообщение от FPaul Посмотреть сообщение
Еще может быть ввод не помещается в 255 символьный тип паскаля. нужна потокавая обработка.
Не-а, посмотрел насчет длинных строк, не в этом дело...
Буду реализовывать Ваш алгоритм, спасибо!
isst вне форума Ответить с цитированием
Старый 08.02.2015, 19:53   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
uses StrUtils;
var
	s : string;
begin
	ReadLn(s);
	WriteLn(WordCount(s, [#0..#255]-['a'..'z']-['A'..'Z']))
end.
Poma][a вне форума Ответить с цитированием
Старый 08.02.2015, 22:30   #7
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Хорошо

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Код:
uses StrUtils;
var
	s : string;
begin
	ReadLn(s);
	WriteLn(WordCount(s, [#0..#255]-['a'..'z']-['A'..'Z']))
end.
Все работает, Ром, респект. Спасибо, что рассказал про модуль StrUtils!
isst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет слов. язык С. Katrini Помощь студентам 2 13.01.2013 20:51
Подсчет кол-ва слов Dima DDM Общие вопросы Delphi 1 25.12.2011 22:20
Подсчет количества слов Driver_09 Помощь студентам 2 24.10.2010 17:14
Подсчет слов(Си) Bl@st Помощь студентам 18 21.12.2009 23:45
Подсчет слов Stanislav Общие вопросы Delphi 11 28.08.2008 10:37