Замените последний символ каждого слова в предложении на заглавную, используя Ruby - PullRequest
2 голосов
/ 09 июня 2010

Мне было предложено написать код на Ruby, который изменяет последний символ каждого слова в предложении на заглавную.Так что строка:

"script to convert the last letter of every word to a capital"

становится

"scripT tO converT thE lasT letteR oF everY worD tO A capitaL"

Это то, что я в итоге использовал:

"script to convert the last letter of every word to a capital".split.map{|w|w<<w.slice!(-1).chr.upcase}.join' '

Для тех, кто интересуется тем, что происходитВот объяснение.

split разбит предложение на массив, разделитель по умолчанию - пробел, а в Ruby вам не нужно использовать квадратные скобки.

map массив из split передается на карту, которая открывает блок и обрабатывает каждое слово (w) в массиве.блок slice! (s) отключает последний символ слова и преобразует его в chr (символ, не код ASCII), а затем использует заглавные буквы upcase it,Этот символ теперь добавляется << </strong> к слову, в котором отсутствует последняя вырезанная буква.Наконец, массив слов теперь объединяет вместе с '' , чтобы изменить предложение.

Ответы [ 5 ]

8 голосов
/ 09 июня 2010

вот быстрый и грязный метод регулярных выражений, который наверняка будет нарушен способами, которые я не рассматривал:

"the quick brown fox jumps over the lazy dog".gsub(/.\b/) { |m| m.upcase }

то есть в верхнем регистре совпадение последнего символа перед границей слова.

4 голосов
/ 10 июня 2010

С помощью рельсов titleize метод вы можете:

str.reverse.titleize.reverse
2 голосов
/ 10 июня 2010

Ну, я не знаю Ruby, но вот попытка его двоюродного брата (Python), он даже немного короче:

' '.join(w[:-1]+w[-1].upper()for w in
"script to convert the last letter of every word to a capital".split())

Но подход с reverse-titleize-reverse - это реальная сделка:

"script to convert the last letter of every word to a capital"[::-1].title()[::-1]
2 голосов
/ 09 июня 2010

Моя попытка охватить все вопросы пунктуации с помощью регулярного выражения:

str = %("But we're street-smart," she said.)

str.gsub(/\w\W*(\s|$)/) {|m| m.upcase }
1 голос
/ 09 июня 2010
str.reverse.split(/\b/).map(&:capitalize).join.reverse

Тем не менее, он преуменьшает все остальные буквы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...