С Новым годом! Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 2
Регистрация: 23.10.2016
Сообщений: 10

Составить список количества букв в каждом слове строки

04.10.2018, 17:56. Показов 4708. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно составить функцию, считающую количество букв в каждом слове строки.
Была составлена функция, которая считает все буквы в строке, но как её модифицировать, чтобы она считала отдельно каждое слово?

Функция:
F#
1
2
open System
"234 abcdefg" |> Seq.sumBy (fun ch -> if Char.IsLetter ch then 1 else 0) |> Console.WriteLine
Вывод:
F#
1
2
7
val it : unit = ()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.10.2018, 17:56
Ответы с готовыми решениями:

Подсчитать число букв в каждом слове строки и сформировать список, в качестве элементов которого используются числа
Помогите решить: Подсчитать число букв в каждом слове строки и сформировать список, в качестве элементов которого используются числа,...

Подсчитать процент букв «а» в первом слове строки от общего количества букв «а» в тексте
Подсчитать процент букв «а» в первом слове строки от общего количества букв «а» в тексте.

Строки:Посчитать количество различных букв в каждом слове строки
Здравствуйте!Помогите пожалуйста очень срочно надо((Вот условие задачи надо написать прогу на С: дана строка. для каждого различного слова...

14
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
04.10.2018, 21:58
Лучший ответ Сообщение было отмечено Evanengell как решение

Решение

Цитата Сообщение от Evanengell Посмотреть сообщение
Была составлена функция, которая считает все буквы в строке, но как её модифицировать, чтобы она считала отдельно каждое слово?
Во-первых, тут нет функции. Во-вторых, зачем это модифицировать, когда оно делает не то, что нужно?
Тут главная проблема в том, что ты не указал, как определить границы слов. То есть, могут ли быть в предложении знаки препинания, или, скажем, дефисы в словах и как это все следует обрабатывать. Если взять простейший вариант, когда слова разделены ровно одним пробелом и все что между пробелами надо считать отдельными словами, то можно сделать так
F#
1
let wordslen (s:string) = s.Split(' ') |> Array.map (fun w -> w.Length)
Ну и вывод на консоль
F#
1
wordslen "Это текст для теста" |> printfn "%A"
2
0 / 0 / 2
Регистрация: 23.10.2016
Сообщений: 10
04.10.2018, 22:59  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Во-первых, тут нет функции. Во-вторых, зачем это модифицировать, когда оно делает не то, что нужно?
Тут главная проблема в том, что ты не указал, как определить границы слов. То есть, могут ли быть в предложении знаки препинания, или, скажем, дефисы в словах и как это все следует обрабатывать. Если взять простейший вариант, когда слова разделены ровно одним пробелом и все что между пробелами надо считать отдельными словами, то можно сделать так
Спасибо вам, я понял. С знаками препинания теперь смогу разобраться тоже
0
0 / 0 / 2
Регистрация: 23.10.2016
Сообщений: 10
06.10.2018, 16:29  [ТС]
Захотел конкретно разобраться в вопросе, можно ли это же выражение записать без использования библиотеки?
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
06.10.2018, 17:30
Каких библиотек?
0
0 / 0 / 2
Регистрация: 23.10.2016
Сообщений: 10
06.10.2018, 17:37  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Каких библиотек?
Имею в виду не использовать библиотечные функции, типа Array.map
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
06.10.2018, 17:49
Цитата Сообщение от Evanengell Посмотреть сообщение
не использовать библиотечные функции, типа Array.map
А как ты себе это представляешь? Посимвольно обойти строку в цикле или что? Но думаю и там придется все равно что-то использовать. Тогда уж надо точно определиться с тем, что можно использовать, а что нет.
0
0 / 0 / 2
Регистрация: 23.10.2016
Сообщений: 10
06.10.2018, 20:49  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Посимвольно обойти строку в цикле или что?
А так можно? Было бы интересно увидеть реализацию подобного. Я пока только учу этот язык, многого еще не понимаю, хочу разобраться
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
07.10.2018, 02:16
Цитата Сообщение от Evanengell Посмотреть сообщение
Было бы интересно увидеть реализацию подобного.
Ну, например, напечатать длины слов, где слова разделены ровно одним пробелом можно вот так
F#
1
2
3
4
5
6
7
8
9
10
11
let printwordslen (s: string) =
    let mutable cl = 0
    for ch in s do
        if ch = ' ' then
            printf "%i " cl
            cl <- 0
        else cl <- cl + 1
    if cl > 0 then printfn "%i " cl
    ()
 
printwordslen "Это тестовая строка для проверки функции"
0
0 / 0 / 2
Регистрация: 23.10.2016
Сообщений: 10
07.10.2018, 12:01  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Ну, например, напечатать длины слов, где слова разделены ровно одним пробелом можно вот так
Благодарю за ваш ответ, буду разбираться!
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.10.2018, 19:50
Цитата Сообщение от Evanengell Посмотреть сообщение
А так можно? Было бы интересно увидеть реализацию подобного. Я пока только учу этот язык, многого еще не понимаю, хочу разобраться
F#
1
2
3
4
5
6
7
8
9
10
11
let printwordslen (s: string) =
    let rec loop state xs =
        seq [ match state, xs with
              | Some n, c :: t when System.Char.IsLetter c -> yield! loop (Some (n + 1)) t
              | Some n, c :: t -> yield n; yield! loop None t
              | Some n, [] -> yield n
              | None, [] -> ()
              | None, c :: t when System.Char.IsLetter c -> yield! loop (Some 1) t
              | None, c :: t -> yield! loop None t
            ]
    loop None [ yield! s ]
1
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
08.10.2018, 00:53
Ну, раз уж пошла такая пьянка, то вот логика примененная ранее в цикле, только с рекурсией
F#
1
2
3
4
5
6
7
8
9
10
let printwordslen2 (s: string) =
    let rec loop cl i =
        if i >= s.Length then printfn "%i" cl
        else if s.[i] = ' ' then
            printf "%i " cl
            loop 0 (i + 1)
        else loop (cl + 1) (i + 1)
    loop 0 0 
 
printwordslen2 "Это тестовая строка для проверки функции"
Ну и примерно то же самое, только функция не печатает числа, а возвращает список.
F#
1
2
3
4
5
6
7
8
9
10
let getwordslen (s: string) =
    let rec loop cl i=
        [if i >= s.Length then yield cl
        else if s.[i] = ' ' then
            yield cl
            yield! loop 0 (i + 1)
        else yield! loop (cl + 1) (i + 1)]
    loop 0 0 
 
getwordslen "Это тестовая строка для проверки функции" |> printfn "%A"
0
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
11.04.2019, 10:21
Цитата Сообщение от diadiavova Посмотреть сообщение
s.Split(' ')
Почему разработчики не сделают Split функцией или статическим методом в стиле F#, а не нестатическим методом?
F#
1
String.split separaters str
Так удобней, на мой взгляд. На конвейер удобней ставить.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
11.04.2019, 10:50
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Почему разработчики не сделают Split функцией или статическим методом в стиле F#, а не нестатическим методом?
В данном случае использовалась функция из основной библиотеки фреймворка, а не из библиотек F#, то есть она, фактически, была заточена под другие языки, а отсутствие подобной функции в эфшарповском модуле String, по всей видимости объясняется нежеланием дублировать функционал лишний раз. Но если тебе нужна такая функция, что мешает ее написать?
F#
1
let split separator (str:string) = str.Split(separator)
Неужели для этого нужно привлекать еще каких-то разработчиков?
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Так удобней, на мой взгляд. На конвейер удобней ставить.
А сейчас в чем неудобство?
1
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
11.04.2019, 16:54
Цитата Сообщение от diadiavova Посмотреть сообщение
что мешает ее написать?
Принцип.
Я её всегда и пишу также, при надобности. F# удобен тем, что можно удобно и быстро обернуть функцию как тебе надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2019, 16:54
Помогаю со студенческими работами здесь

Файлы: Составить функцию, определяющую количество букв в каждом слове
Прочитать строку их текстового файла. Составить функцию, определяющую кол-во букв в каждом слове. Определить самое короткое слово

Как посчитать число букв в каждом слове строки
подскажите , как посчитать число букв в каждом слове строки

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

Определить процедуру нахождения числа гласных букв в слове и применить её для нахождения числа гласных букв в каждом слове заданного предложения
У меня проблема с нахождением гласных букв: Определить процедуру нахождения числа гласных букв в слове и применить её для нахождения...

В каждом слове строки определить букву, которая в слове встречается наибольшее количество раз
Народ, помогите! Второй день сижу над этой программой. Условие такое: Дано N слов. В каждом слове определить букву, которая в слове...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru