1 / 1 / 0
Регистрация: 07.03.2016
Сообщений: 20
1

Подсчитать в строке количество слов длиной пять символов

13.09.2016, 00:15. Показов 2020. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
С клавиатуры вводится строка, состоящая из нескольких слов, отделенных друг от друга одним или несколькими пробелами. Подсчитать в строке количество слов длиной пять символов.

Решение:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Procedure vvod(var s:string);
  Begin
   writeln('Введите несколько слов через пробел');
   readln(s);
  End;
Function Chet(var s: string): integer;
 var a: integer;
     b: string;
 Begin
   s := s + ' ';
   if pos(' ', s) <> 0 then   //Удаляет лишние пробелы
   delete(s, pos(' ', s), 1);
   while pos(' ', s) <> 0 do  //Ищем, есть ли слова, которые состоят из 5 букв
    Begin
     b:= copy(s, 1, pos(' ', s));
     if length(b) = 5 then
     a:= a + 1;
     delete(s, 1, pos(' ', s));
    End;
  Chet:= a;
  writeln(a); //Выводим кол-во слов из 5 букв
 End;
 
var s: string;
 Begin
  vvod(s);
  Chet(s);
  writeln(s);
 End.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2016, 00:15
Ответы с готовыми решениями:

Подсчитать количество слов (длиной больше 3) в строке
Тут такая вот задача: Посчитать количество слов в тексте с количеством символов больше 3. Слово -...

Определить количество слов в строке длиной от N-1 до N+1 символов
Дана строка предложение. Определить количество слов в строке длиной от N-1 до N+1 символов. Число...

Подсчитать количество слов, состоящих из латинских букв, длиной свыше 4 символов
Помогите, пожалуйста!!!

Подсчитать количество символов и слов в строке
Помогите пожалуйста, нужно подсчитать количество символов и слов в строке (учитывать только буквы)....

7
5077 / 2649 / 2349
Регистрация: 10.12.2014
Сообщений: 10,024
13.09.2016, 05:01 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Если более-менее сохранять синтаксис паскаля, то можно так:
Pascal
1
2
3
4
5
6
7
8
begin
  var S := ReadLnString('Введите несколько слов через пробел:');
  var count := 0;
  foreach var Word in S.ToWords(#32) do
    if Word.Length = 5 then
      count += 1;
  WriteLn('Количество слов длиной 5 символов = ', count);
end.
0
5077 / 2649 / 2349
Регистрация: 10.12.2014
Сообщений: 10,024
13.09.2016, 05:20 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Хотя можно и одной строкой:
Pascal
1
2
3
begin
  WriteLn('Количество слов длиной 5 символов = ', ReadLnString('Введите несколько слов через пробел:').ToWords(#32).Where(w -> w.Length = 5).Count);
end.
0
1 / 1 / 0
Регистрация: 07.03.2016
Сообщений: 20
13.09.2016, 19:36  [ТС] 4
Спасибо за Ваше решение, но мы так не решаем. Многого еще не проходили. Вот в том варианте, который выложен в исходном документе, что неправильно? Программа не работает. ((

Добавлено через 50 секунд
Сама не могу ошибку найти.
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.09.2016, 04:23 5
Цитата Сообщение от NatashaSolo Посмотреть сообщение
Сама не могу ошибку найти.
ошибки в комментариях
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Procedure vvod(var s:string);
  Begin
   writeln('Введите несколько слов через пробел');
   readln(s);
  End;
Function Chet(var s: string): integer;
 var a: integer;
     b: string;
 Begin
   s := s + ' ';
   if pos('  ', s) <> 0 then   //Удаляет лишние пробелы, искать надо сдвоенные пробелы и удалять один, а вы удаляли все пробелы
   delete(s, pos('  ', s), 1);
   while pos(' ', s) <> 0 do  //Ищем, есть ли слова, которые состоят из 5 букв
    Begin
     b:= copy(s, 1, pos(' ', s)-1);// копировать надо без пробела в конце поэтому -1!
     if length(b) = 5 then
     a:= a + 1;
     delete(s, 1, pos(' ', s));
    End;
  Chet:= a;
  writeln(a); //Выводим кол-во слов из 5 букв
 End;
 
var s: string;
 Begin
  vvod(s);
  Chet(s);
  writeln(s);
 End.
1
1 / 1 / 0
Регистрация: 07.03.2016
Сообщений: 20
14.09.2016, 22:44  [ТС] 6
Заработала))) Спасибо огромное)))
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,076
Записей в блоге: 1
18.09.2016, 10:05 7
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

NatashaSolo,
для подсчета слов совсем не обязательно модифицировать строку:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
const Delim=[' ']; WordLen=5;
var
  s: String;
  i, j, k: Integer;
begin
  Write('Строка: '); ReadLn(s); s:=s+' '; {j:=0; k:=0;}
  for i:=1 to Length(s) do
    if s[i] in Delim then begin
      if i-j=WordLen+1 then Inc(k); { между последним и текущим разделителем WordLen букв }
      j:=i; { запомним позицию последнего разделителя }
    end;
  WriteLn(k);
end.
Добавлено через 8 минут
или с функцией:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type TChars = set of Char;
function WordLCnt(s: String; Len: Integer; Delim: TChars): Integer;
var i, j, k: Integer;
begin
  j:=0; k:=0; s:=s+' ';
  for i:=1 to Length(s) do
    if s[i] in Delim then begin
      if i-j=Len+1 then Inc(k);
      j:=i;
    end;
  WordLCnt:=k;
end;
var s: String;
begin
  Write('Строка: '); ReadLn(s);
  WriteLn(WordLCnt(s,5,[' ']));
end.
Добавлено через 1 минуту
или с заданием разделителей строкой вместо множества:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function WordLCnt(s: String; Len: Integer; const Delim: String): Integer;
var i, j, k: Integer;
begin
  j:=0; k:=0; s:=s+' ';
  for i:=1 to Length(s) do
    if Pos(s[i],Delim)>0 then begin
      if i-j=Len+1 then Inc(k);
      j:=i;
    end;
  WordLCnt:=k;
end;
var s: String;
begin
  Write('Строка: '); ReadLn(s);
  WriteLn(WordLCnt(s,5,' '));
end.
Добавлено через 3 минуты
или без модификации строки:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function WordLCnt(const s: String; Len: Integer; const Delim: String): Integer;
var i, j, k: Integer;
begin
  j:=0; k:=0;
  for i:=1 to Length(s) do
    if Pos(s[i],Delim)>0 then begin
      if i-j=Len+1 then Inc(k);
      j:=i;
    end;
  if Length(s)-j=Len then Inc(k);
  WordLCnt:=k;
end;
var s: String;
begin
  Write('Строка: '); ReadLn(s);
  WriteLn(WordLCnt(s,5,' '));
end.
Добавлено через 4 минуты
или чуть более оптимизированный последний вариант:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function WordLCnt(const s: String; Len: Integer; const Delim: String): Integer;
var i, j, k: Integer;
begin
  j:=Length(s)+1; k:=0; Inc(Len);
  for i:=j-1 downto 1 do
    if Pos(s[i],Delim)>0 then begin
      if j-i=Len then Inc(k);
      j:=i;
    end;
  if j=Len then Inc(k);
  WordLCnt:=k;
end;
var s: String;
begin
  Write('Строка: '); ReadLn(s);
  WriteLn(WordLCnt(s,5,' '));
end.
1
1 / 1 / 0
Регистрация: 07.03.2016
Сообщений: 20
18.09.2016, 20:10  [ТС] 8
Спасибо большое за разные варианты решения! Все пригодится!
0
18.09.2016, 20:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2016, 20:10
Помогаю со студенческими работами здесь

Массив символов (Подсчитать количество слов в строке, при условии, что в качестве разделителя слов используется один или несколько пробелов)
Написать программу, в которой с клавиатуры вводится строка символов. Подсчитать количество слов в...

Пример из книги Лафоре. Подсчитать количество слов и символов в строке
#include &lt;iostream&gt; #include &lt;conio.h&gt; // для getche() using namespace std; int main() {...

Дана строка символов. Определить наибольшую длину слова в строке. Определить количество слов с наибольшей длиной
Дана строка символов. Определить наибольшую длину слова в строке. Определить количество слов с...

Подсчитать количество слов в строке, которые повторяются 3 и более раза с количеством символов больше 6
Console.WriteLine(&quot;Пов. слово&quot;); string pov = Console.ReadLine(); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru