Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите, очень прошу

12K
07 ноября 2005 года
Dural
7 / / 07.11.2005
Слова в тексте разделены пробелом. Подсчитать количество слов длина которых не превышает 4-х букв
5
07 ноября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Dural
Слова в тексте разделены пробелом. Подсчитать количество слов длина которых не превышает 4-х букв


Код:
function CountWords(const S: string): integer;
  var WrdCnt: integer;
      Len: integer;
      Pos: integer;

      procedure SkipSpace;
        begin
          while (Pos<=Len)and(S[Pos] = ' ') do inc(Pos);
        end;

      procedure ScanWord;
        var WrdLen: integer;
        begin
          WrdLen:=0;
          while (Pos<=Len)and(S[Pos] <> ' ') do begin
             inc(WrdLen);
             inc(Pos);
          end;
          if (WrdLen > 0)and(WrdLen <= 4) then inc(WrdCnt);
        end;

  begin
    WrdCnt:=0;
    Len:=Length(S);
    Pos:=1;
    while Pos <= Len do begin
        SkipSpace;
        ScanWord;
    end;
    Result:=WrdCnt;
  end;

вообще-то такие вещи самостоятельно писать надо!
11K
09 ноября 2005 года
Evgen2877
11 / / 11.09.2005
Что-то Вы, батенька, перемудрили :-)))
по-моему, все чуть проще...

program e_moe; { :-)) }
var
st : string:
ksl,ksm,i : integer;
sm : string;
begin
ksl:=0;
ksm:=0;
i=1;
while i<=lenght(string) begin
if pos(string,i,1)=' ' do begin
if ksm<4 then ksl:=ksl+1;
ksm:=0;
end;
i:=i+1;
ksm:=ksm+1;
end;
writeln('Количество слов в которых меньше 4 символов=',ksl);
end.
5
09 ноября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Evgen2877
Что-то Вы, батенька, перемудрили :-)))
по-моему, все чуть проще...


Знаю. Но мне так больше нравится - красиво.

В принципе и без pos можно обойтись. Просто я увлекался парсингом и привык всё делать строго - вдруг слово в строке какое понадобится?

ЗЫ а если два пробела между словами?

325
10 ноября 2005 года
Franky
723 / / 10.08.2005
момент "if pos..." можно заменить на "if st=$20", где st - строка, i - № символа
и
:=i+1;
ksm:=ksm+1;
на
inc(i);
inc(ksm);
было-б время - переписал бы все ;)
11K
10 ноября 2005 года
Evgen2877
11 / / 11.09.2005
два пробела?
тогда придется цикл начинать с 2, skl изначально присвоить 1 (одно-то слово наверняка в строке есть) и перед инкрементацией ksl проверять на пробел i-1 ый символ строки. увеличивать, соответственно, в случае отрицательного результата проверки
11K
10 ноября 2005 года
Evgen2877
11 / / 11.09.2005
конечно, можно, только под рукой Паскакаля не было, а формат функции inc к своему стыду, подзабыл. боялся ошибиться.
12K
11 ноября 2005 года
Dural
7 / / 07.11.2005
Спасибо, я так и сделала
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог