Версия для печати темы
Форум «Всё о Паскале» _ Задачи _ кол-во слов в тексте
Автор: tigra 17.10.2004 0:50
Задача на ваше профессиональное рассмотрение:
Подсчитать количество слов в тексте,которые содержат одинаковое кол-во букв.
Слова в тексте разделяются символом ' '
'.' - признак конца строки.
Текст вводится с клавиатуры. Не могу сделать самое главное - разбить текст на слова... Помогите чем могите.
Автор: GoodWind 17.10.2004 10:58
что разделяет слова в тексте ? пробелы, следовательно каждый пробел это конец слова, т.е. если ты встречаешь пробел, значит текущее слово кончилось
на этом принципе и отделяй слова друг от друга.
Автор: Altair 17.10.2004 12:11
Эх, такая тема раз в году точно встречается!
Надо в FAQ будет выложить.
Код
var
s:string;
i:byte;
sl:byte;
begin
readln(s);
for i:=1 to length(s) do If s[i]=' ' then inc(sl);
writeln(sl);
end.
Вот и вся прога.
Автор: Amro 17.10.2004 14:26
Хм
Oleg_Z там ведь написано
Цитата
количество слов в тексте, которые содержат одинаковое кол-во букв
А у тебя идёт просто подсчёт всех слов!!!
Тута надо по-другому, к примеру используя дочерний массив, в который будем заносить число букв в слове, мы заносим в массив кол-во букв первого слова, далее берём второе слово, подсчитываем в нём кол-во букв и смотрим есть ли такое число в массиве, если есть то накручиваем переменную с кол-вом слов, если нет то заносим новое число в массив..... и так до конца...
Автор: Altair 17.10.2004 14:32
Ах, да, пардон...
так, а тогда условие не полное!
например строка:
Код
123 asc asd 2345 отвр
сколько в ней таких слов?
Смотря по какой длинне считать!
Если 3-х символьных, то 3 а если из 4 символов, то 2!
Число символов вводится отдельно или смотрится по первой паре?
Автор: Amro 17.10.2004 14:39
Oleg_Z Может имеется ввиду считать слова, которые встречаются в тексте более одного раза. К примеру такая строка, независимо от длины
""xxx xx x xx x xxx xxx xx xxxxx"" тыды кол-во тут равно 8.....
Автор: Altair 17.10.2004 14:58
короче говоря тут не совсем ясно условие!
Автор: tigra 17.10.2004 15:15
В задаче этого не скозано, но по-моему кол-во букв(n) тоже вводится с клавиатуры.
Кажется, тут это можно сделать двумя циклами:
один выделяет слова из текста
Код
until s[i]='.'
,
а другой их считает
Код
if length(sl)=n then x:=x+1
.
Кол-во слов неопределенное (сколько получится), так что я не знаю как их называть и отличать друг от друга...
Автор: Amro 17.10.2004 15:36
Цитата
if length(sl)=n then x:=x+1
Это что такое ты написал??? sl Это что за строка??
Думаю так, если имеется ввиду кол-во букв в слове введённое с клавы, тады будет что то типа того
Код
var
st:string;
i,kol,kol_slov:byte;
s:byte;
begin
readln(st); {сама вводимая строка}
readln(kol_slov); {кол-во букв в слове}
for i:=1 to length(st) do begin If st[i]<>' ' then inc(s)
else if s=kol_slov then inc(kol);
if st[i]=' ' then s:=0; end;
if kol<2 then kol:=0;{если встречается один раз тады колич = 0}
writeln(kol);
end.
Автор: BlackShadow 19.10.2004 1:46
Я же это уже пиал где-то когда-то кому-то...
Автор: Флогримм 19.10.2004 11:09
Цитата(Oleg_Z @ 17.10.04 7:11)
Код
var
s:string;
i:byte;
sl:byte;
begin
readln(s);
for i:=1 to length(s) do If s[i]=' ' then inc(sl);
writeln(sl);
end.
Вот и вся прога.
а как быть, если нет условия разделения слов символом пробела?
что, если мы имеем строку вида 'xxxxxсловоxxxxxxxслово1xxxслово2xx', где x - пробел, как подсчитать кол-во слов в такой строке?
Автор: Altair 19.10.2004 11:31
Сначала удали все лишние пробелы, отанется по одному разделяющему пробелу, затем применяй вышеукащанную схему. Элементарно, Ватсон )
Автор: xds 19.10.2004 12:30
Цитата(Oleg_Z @ 19.10.04 7:31)
Сначала удали все лишние пробелы
Удалять слишком тяжело - лучше пропускать...
Автор: Altair 19.10.2004 13:02
Удалять тяжело??
Чего сложного-то?
Ну вобщем пропускать тоже можно.
Тогда можно еще одну переменную логическую завести, и чуточку модернизировать алгоритм вышеуказанный
Автор: Флогримм 20.10.2004 10:27
если удалять, получится что-то вроде вот этого
Код
var
s:string;
i:byte;
sl:byte;
begin
readln(s);
while pos(' ',s)<>0 do delete(s,pos(' ',s),2);
if s[1]=' ' then delete(s,1,1);
if s[length(s)]=' ' then delete(s,10,1);
writeln(s);
for i:=1 to length(s) do If s[i]=' ' then inc(sl);
writeln(sl+1);
end.
я думаю, что если в начале и конце строки нет пробелов, тогда кол-во слов в троке будет равно sl+1 т.к. пробелов всегда на один меньше