IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Как подсчитать количество слов в строке ?
Крутой
сообщение 5.12.2003 18:11
Сообщение #1


Гость






Ребята, помогите подсчитать количество слов в строке ??
Слова (группы символов) разделены пробелами (одним или несколькими -- в этом и загвоздка)..... :-[
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
trminator
сообщение 5.12.2003 18:22
Сообщение #2


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Можно просто сначала удалить повторяющиеся пробелы
Код

while pos('  ', mystring > 0 do delete(mystring, pos('  ', mystring, 1)

и пробелы в начале строки и в конце строки, а затем посчитать количество пробелов и прибавить единичку. Но это не лучший способ.


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GLuk
сообщение 5.12.2003 21:40
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


А ежели без удаления, дык это просто смотреть строку в прямом направлении и ПРОПУСКАТЬ повторяющиеся пробелы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
error_404
сообщение 6.12.2003 3:27
Сообщение #4





Группа: Пользователи
Сообщений: 8

Репутация: -  0  +


и ещё отсеивать отдельно стоящие знаки препинания, предлоги и пр. муру... мне это на лабе было лениво делать....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 6.12.2003 9:35
Сообщение #5


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Вот, на мой взгляд, хорошее решение:
Код

program for_cool;
var s        : string;
   i        : integer;
   in_word  : boolean;
   count    : integer;
const letters  : set of char = ['a'..'z', 'A'..'Z'];{Сюда добавить еще русские буквы}
begin
 count:=0; in_word:=false;
 readLn(s);

 for i:=1 to length(s) do
 begin
    if (s[i] in letters) and (not in_word) then
    begin
        in_word:=true; inc(count)
    end
    else if not (s[i] in letters) and in_word then
    begin
        in_word:=false
    end
 end;

 writeLn(count)
end.

В отличие от варианта с удалением двойных пробелов этот алгоритм сделает все за один проход, а не будет сначала сто раз бегать по строке в поисках пробелов, а потом еще и считать их. Ну и со знаками препинания всякими вроде нет проблем
Тесты (мало тестил, лень smile.gif
qwe rty f   a v<десяток пробелов>
ответ - 5

<много пробелов> kdfjgh<много пробелов> dhgf sd<много пробелов> n, re,,,,<табуляции всякие>dsdf
ответ - 6

<табуляция>srughsfigh<еще табуляция>ifu jfhgaj tieuyt , , , , , , ,f
ответ - 5

Вот по поводу последнего теста: отдельно стоящая буква - тоже слово?

А вопрос, по-моему, можно и в FAQ какой-нибудь сунуть


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Крутой
сообщение 6.12.2003 11:15
Сообщение #6


Гость






ВО-РЕРВЫХ, СПАСИБО ВСЕМ ЗА ОТВЕТЫ!!! :D
ВО-ВТОРЫХ,trminator, у меня к тебе пару вопросов:
первый: кто такой "ИМХО" И ЧТО ТАКОЕ "ЧАВО"?
второй: что такое in_word и почему он в цикле вдруг станет true??
я полагаю,это проверка на то , были ли введины символы?
(извини с булями я не силен)???
 К началу страницы 
+ Ответить 
KRUTOY
сообщение 6.12.2003 13:54
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской

Репутация: -  -1  +


:P ВСЁ ПРОСТО ,КАК ПРАВДА!!
Код
uses crt;
var st: String;
  prob: Char;
  p,n,i,k: Integer;
begin
clrscr;
writeLN('введите строку: ');
readln(st);
k:=1;
p:=length(st);
while k<p do
begin
p:=length(st);
inc(n);
if st[n] = ' ' then k := n+1;
if st[k] = ' ' then begin
delete(st,n,1);
dec(n);
end;
end;
if st[1] = ' ' then delete(st,1,1);
i:= length(st);
if st[i]= ' ' then delete(st,i,1);
write(st);
readkey
end.


Сообщение отредактировано: volvo - 17.12.2004 17:35


--------------------
Главное - чтобы воля была, к победе...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 6.12.2003 16:56
Сообщение #8


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Цитата
кто такой "ИМХО" И ЧТО ТАКОЕ "ЧАВО"?

Подправил текст сообщения, чтобы понятней было. ИМХО = "In my humble opinion" - по моему скромному мнению, ЧаВо - Часто Задаваемые Вопросы (и ответы на них), FAQ (кто мне скажет, как читается слово FAQ? Фак?)
Цитата
что такое in_word и почему он в цикле вдруг станет true?

in_word - признак того, что ты сейчас находишься внутри слова (s[i] - часть слова). Если наткнулись на букву и при этом до этого еще не находились внутри слова, значит, вошли в слово, и надо его посчитать.

А последняя программа не выдает, сколько же там слов...


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
KRUTOY
сообщение 6.12.2003 17:36
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской

Репутация: -  -1  +


Понятненько,
Да, но это легко сделать !!


--------------------
Главное - чтобы воля была, к победе...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 6.12.2003 17:57
Сообщение #10


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Цитата
ЭТО ЛЕГКО СДЕЛАТЬ!

Мне показалось, что ты хочешь все же посчитать количество пробелов. Но если это действительно так, то нужно
Цитата
...ещё отсеивать отдельно стоящие знаки препинания <...> и пр. муру...

Правда, я и сам это предлагал, но тогда я не подумал о "пр. муре" sad.gif


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
KRUTOY
сообщение 6.12.2003 18:13
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской

Репутация: -  -1  +


trminator ;D, ладненько с этим я разобрался-- помоги мне с файлами, если не в тягость, дружище? 8)


--------------------
Главное - чтобы воля была, к победе...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
EC
сообщение 15.12.2013 0:46
Сообщение #12


Гость






Program STROKI_3;
Var f: string; i,s: integer;
Begin
cls; writeln(' подсчет слов в фразе'); writeln;
writeln('введи фразу (слова с пробелами)'); readln(f);f:=f+' ';
s:=0;
for i:=1 to ord(f[0]) do
if f[i]=' ' then if f[i-1]<>' ' then s:=s+1 ;
writeln('всего слов: ',s)
end.


Не забываем пользоваться тэгами!


Сообщение отредактировано: APAL - 17.12.2013 15:51
 К началу страницы 
+ Ответить 
APAL
сообщение 17.12.2013 15:56
Сообщение #13


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +



ord(f[0]) аналогично Length(f)
обращение к 0-му элементу не во всех компиляторах "пройдет" (например pascalAPC.net)




--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.07.2025 8:13
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"