Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вставить цифру после гласной букв
 
 автор: Владимир55   (03.06.2008 в 15:20)   письмо автору
 
 

Есть строка типа "Летят перелетные птицы".

Нужно разбить её на слова, каждое из которых ввести в переменную массива. При этом после каждой гласной надо вставить цифру 5, причем в каждом слове на новом месте. Чтобы получилось следующее:

$a[0] = "Ле5тят";
$a[1] = "Летя5т";
$a[2] = "пе5релётные";
$a[3] = "пере5летные";
$a[4] = "переле5тные";
$a[5] = "перелетны5е";
$a[6] = "перелётные5";
$a[7] = "пти5цы";
$a[8] = "птицы5";

Как бы это осуществить?

   
 
 автор: olejek   (03.06.2008 в 16:25)   письмо автору
 
   для: Владимир55   (03.06.2008 в 15:20)
 

Как вариант, можно попробовать это:
<?
$vow_array 
= array('а','о','у','е','и','ы','я');
$string "Летят перелетные птицы";
$word_array explode(" "$string);
    
foreach (
$word_array as $word)
    for (
$i 0$i strlen($word); $i++)
        if (
in_array($word[$i], $vow_array))
            
$a[] = substr($word0$i+1).'5'.substr($word$i+1);
?>

Выведет:
Array
(
[0] => Ле5тят
[1] => Летя5т
[2] => пе5релетные
[3] => пере5летные
[4] => переле5тные
[5] => перелетны5е
[6] => перелетные5
[7] => пти5цы
[8] => птицы5
)

   
 
 автор: Владимир55   (03.06.2008 в 16:56)   письмо автору
 
   для: olejek   (03.06.2008 в 16:25)
 

olejek, спасибо!

Здорово так получилось, кратко, красиво!

Настоящее удовольствие видеть Ваш код!

   
 
 автор: BinLaden   (03.06.2008 в 17:40)   письмо автору
 
   для: olejek   (03.06.2008 в 16:25)
 

> 'а','о','у','е','и','ы','я'

Мне казалось, что гласных букв несколько больше:)

   
 
 автор: olejek   (03.06.2008 в 17:44)   письмо автору
 
   для: BinLaden   (03.06.2008 в 17:40)
 

Да-аа, это очень принципиально, и вопрос был именно, сколько гласных букв в русском алфавите.

   
 
 автор: BinLaden   (03.06.2008 в 17:57)   письмо автору
 
   для: olejek   (03.06.2008 в 17:44)
 

Иронизировать изволите? Ну хорошо, давайте посмотрим на ошибки по сути дела:

<?php
$vow_array 
= array('а','о','у','е','и','ы','я'); 
$string "Америка\r\nи\r\nАфрика";
$word_array explode(" "$string); 
     
foreach (
$word_array as $word
    for (
$i 0$i strlen($word); $i++) 
        if (
in_array($word[$i], $vow_array)) 
            
$a[] = substr($word0$i+1).'5'.substr($word$i+1);


print_r($a);
?>

   
 
 автор: Trianon   (03.06.2008 в 18:22)   письмо автору
 
   для: BinLaden   (03.06.2008 в 17:57)
 

А что не так то?
Как то я качественных ляпов не узрел...
После замены на str_split('аоуыэяёюиеАОУЫЭЯЁЮИЕ') и preg_split("/[\s]+/" всё вроде как было заказано:
Array ( [0] => А5мерика [1] => Аме5рика [2] => Амери5ка [3] => Америка5 [4] => и5 [5] => А5фрика [6] => Афри5ка [7] => Африка5 )

   
 
 автор: BinLaden   (03.06.2008 в 19:10)   письмо автору
 
   для: Trianon   (03.06.2008 в 18:22)
 

> А что не так то?

Как минимум это:

> $word_array = explode(" ", $string);

На выходе, как я понял автора, в каждом элементе должно быть одно слово, а получается:

> Array ( [0] => Аме5рика и Африка [1] => Амери5ка и Африка [2] => Америка5 и Африка [3] => Америка и5 Африка [4] => Америка и Афри5ка [5] => Америка и Африка5 )

   
 
 автор: Владимир55   (03.06.2008 в 18:25)   письмо автору
 
   для: BinLaden   (03.06.2008 в 17:57)
 

Алфавит дополнить несложно:

$vow_array = array('а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я');



Хуже то, что не обрабатывается первая гласная (или не всегда обрабатывается).

К примеру, если задать

$string = "Август Августа Августовский Октябрьский Январь Апрель Апреля Июнь Июньский";


То получаем
Авгу5ст
Авгу5ста
Августа5
Авгу5стовский
Августо5вский
Августовски5й
Октя5брьский
Октябрьски5й
Янва5рь
Апре5ль
Апре5ля
Апреля5
Ию5нь
Ию5ньский
Июньски5й

В чем тут нюанс?

   
 
 автор: Trianon   (03.06.2008 в 18:46)   письмо автору
 
   для: Владимир55   (03.06.2008 в 18:25)
 

Ньюанс в том, что заглавные буквы Вы перечислить забыли.

PS. Рассказали бы, зачем всё это может понадобиться.... на слоги так слова всё равно не делят...

   
 
 автор: Владимир55   (03.06.2008 в 19:28)   письмо автору
 
   для: Trianon   (03.06.2008 в 18:46)
 

Спасибо!

"Ньюанс в том, что заглавные буквы Вы перечислить забыли."
Точно!
В реале скрипт работает только с буквами нижнего регистра. Я сейчас отлаживаю сервис, и в примере об этом позабыл...

"PS. Рассказали бы, зачем всё это может понадобиться.... "
Если вкратце, то учу компьютер ощущать человеческие эмоции. Собственно, он это уже делает. Например, даёт эмоциональную оценку содержания стихотворения (без анализа значения слов).

В разделе "Разное" со временем можно будет об этом написать поподробнее.

   
 
 автор: elenaki   (03.06.2008 в 19:44)   письмо автору
 
   для: Владимир55   (03.06.2008 в 19:28)
 

мне это напомнило старую шутку
читать с выражением!
Пушкин:
17 30 48
140 10 01
126 138
140 3 501


Маяковский:
2 46 38 1
116 14 20!
15 14 21
14 0 17


Есенин:
14 126 14
132 17 43...
16 42 511
704 83


170! 16 39
514 700 142
612 349
17 114 02


Веселые:
2 15 42
42 15
37 08 5
20 20 20!
7 14 и 100
2 00 13
37 08 5
20 20 20!


Грустные:
511 16
5 20 337
712 19
2000047

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования