|
|
|
| Прислали задание по почте. Я честно его понять не могу, точнее примеры, которые написали.
Вот —
Дан текст в кодировке utf-8. Необходимо написать функцию,
которая принимает на вход этот текст и выдает список слов, в
которых все буквы в слове следуют в алфавитном порядке.
Примеры
Вход: abcd 01234 87 01235
Выход: abcd 01234
Вход: ололо я прст гусей
Выход: я прст
|
| |
|
|
|
|
|
|
|
для: admiral
(04.11.2010 в 16:35)
| | Последовательность:
explode() - по пробелу
str_split() - преобразуем каждый полученный элемент в массив
asort() - сортируем по алфавиту
implode() - объединяем полученное в строку | |
|
|
|
|
|
|
|
для: Лена
(04.11.2010 в 16:45)
| | Это не то, что требовалось.
Требовалось лишь пропустить элементы удовлетворяющие условию.
Ничего не переделывая. | |
|
|
|
|
|
|
|
для: Лена
(04.11.2010 в 16:45)
| | И будет работать? | |
|
|
|
|
|
|
|
для: admiral
(04.11.2010 в 16:35)
| | создайте строку с последовательностью символов алфавита. abcdef......0123...
разбейте входную строку на массив по словам.
проверяйте входит ли каждое слово из массива слов входной строки в строку с алфавитом. те которые входят записывайте в результат. | |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 17:10)
| | Какой алфавит? | |
|
|
|
|
|
|
|
для: sim5
(04.11.2010 в 17:20)
| | unicode | |
|
|
|
|
|
|
|
для: Trianon
(04.11.2010 в 17:26)
| | Я думаю, что он об этом даже и не подумал. | |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 17:10)
| | строка вроде bde сквозь такой фильтр не пройдет.
А согласно условию, должна, очевидно.
И опять же - Вы представляете себе строку, размером с весь unicode? По-моему - нет. | |
|
|
|
|
|
|
|
для: Trianon
(04.11.2010 в 17:24)
| | мне показалось, что русского, английского и чисел достаточно | |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 17:29)
| | зря. Не надо быть таким шовинистом.
Тем более, что алфавит задан в условии явным образом. | |
|
|
|
|
|
|
|
для: Trianon
(04.11.2010 в 17:24)
| | нет, судя по всему вы ошибаетесь
условие
Вход: abcd 01234 87 01235
Выход: abcd 01234
01235 не прошло, хотя по вашим словам должно бы... | |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 17:31)
| | условие непрерывности в задании не подчеркивается,
пожалуй, этот пример ему и вправду противоречит.
Тем хуже для примера. :) | |
|
|
|
|
|
|
|
для: Trianon
(04.11.2010 в 17:35)
| | согласен. вообще задание само по себе неочевидное. но я намеренно его не усложнял бы :) | |
|
|
|
|
|
|
|
для: admiral
(04.11.2010 в 16:35)
| | набросал черновое решение из условия (алфавит весь не переписывал)
<?php
$abc = "abcdefjhi...0123456789";
$str = "abc abb cde cce 0001 0123 555 456 88 89";
$words_arr = explode(" ", $str);
foreach ($words_arr as $key => $word) {
if (!mb_substr_count($abc, $word, "utf-8")) {
unset($words_arr[$key]);
}
}
echo implode(" ", $words_arr);
|
| |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 17:32)
| | Как быть в вашем решении, если будут строки в верхнем регистре? К тому же, utf-это не обязательно два байта. | |
|
|
|
|
|
|
|
для: sim5
(04.11.2010 в 18:18)
| | это просто пример. я думаю, автор напишет сам или приведет его к тому виду,который ему нужен. вариантов много, включая самый кривой - просто записать в алфавит те же символы в верхнем регистре. | |
|
|
|
|
|
|
|
для: sim5
(04.11.2010 в 18:18)
| | а как Вам такой вариант?
<?php
// ....
if (!preg_match("/".preg_quote($word)."/i", $abc)) {
// .....
}
// ...
|
| |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 18:37)
| | Что вы меня спрашиваете, вы попробуйте, вот вам и ответ будет, но utf | |
|
|
|
|
|
|
|
для: sim5
(04.11.2010 в 18:44)
| | я попробовал еще до того, как написал тут.
работает так как надо, файл в кодировке utf-8 | |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 20:18)
| | выходит, плохой файл выбрали, негодный... :) | |
|
|
|
|
|
|
|
для: Trianon
(04.11.2010 в 22:22)
| | я уже даже так поизвращался :)
<?php
$abc = iconv("cp1251", "UTF-8", "abcdefjhi...0123456789");
$str = iconv("cp1251", "UTF-8", "abc abb cde cce 0001 0123 555 456 88 89");
// ...
|
p.s разъясните плиз в чем тут соль, а то судя по всему я в теме кодировок плаваю | |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 22:46)
| | Стоило с английскими литерами извращаться-то, им и utf то не нужен для примера вашего. | |
|
|
|
|
|
|
|
для: sim5
(05.11.2010 в 08:44)
| | а, вот оно что...русские не тестил. пусть уже этим автор занимается :) | |
|
|
|
|
|
|
|
для: psychomc
(04.11.2010 в 18:37)
| | Почему бы не воспользоваться таблицей ASSCI? | |
|
|
|
|
|
|
|
для: Gubichev
(04.11.2010 в 19:00)
| | А что это за таблица? | |
|
|
|
|
|
|
|
для: sim5
(04.11.2010 в 19:05)
| | *ASCII | |
|
|
|
|
|
|
|
для: Gubichev
(04.11.2010 в 19:12)
| | Это другое дело, но в задании как бы не указывается, что строки представленные в utf обязательно только те, которые можно представить в ASCII. | |
|
|
|
|
|
|
|
для: admiral
(04.11.2010 в 16:35)
| |
<?php
$text = "ололо я прст гусей";
$words = explode(" ", $text);
$result = array();
foreach ($words as $word) {
$chars = array();
$chars = str_split($word);
$count = count($chars);
$i = 0;
$boolean = true;
for ($i = 0; $i < $count - 1; ++$i) {
$x = $chars[$i];
$y = ++$x;
if ($y == $chars[$i + 1]) {
continue;
}
else {
$boolean = false;
break;
}
}
if ($boolean) {
$result[] = $word;
}
}
var_dump($result);
?>
|
| |
|
|
|
|
|
|
|
для: Красная_шляпа
(05.11.2010 в 12:16)
| | Еще один умник. Вы хотя бы попробовали на бумажке, отдельно, str_split для utf, о коем говорится в задании, а уж потом... | |
|
|
|
|
|
|
|
для: sim5
(05.11.2010 в 12:21)
| |
<?php
$text = "abcd 01234 87 01235";
$words = explode(" ", $text);
$result = array();
foreach ($words as $word) {
$chars = array();
$chars = str_split($word);
$count = count($chars);
$i = 0;
$boolean = true;
for ($i = 0; $i < $count - 1; ++$i) {
$x = $chars[$i];
$y = ++$x;
if ($y == $chars[$i + 1]) {
continue;
}
else {
$boolean = false;
break;
}
}
if ($boolean) {
$result[] = $word;
}
}
var_dump($result);
?>
|
работает для русских букв другой алгоритм придумывать надо | |
|
|
|
|
|
|
|
для: Красная_шляпа
(05.11.2010 в 12:24)
| | Очень ценно! А для китайских другой, а для иврита еще один.... | |
|
|
|
|
|
|
|
для: sim5
(05.11.2010 в 12:32)
| |
<?php
echo "<html><head><meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"></head><body><pre>";
$alpha = "";
for ($i = 65; $i <= 122; ++$i) {
if ($i >= 91 and $i < 97) continue;
$alpha.= chr($i);
}
$alpha = str_split($alpha);
$alpha[] = "А";
$alpha[] = "Б";
$alpha[] = "В";
$alpha[] = "Г";
$alpha[] = "Д";
$alpha[] = "Е";
$alpha[] = "Ё";
$alpha[] = "Ж";
$alpha[] = "З";
$alpha[] = "И";
$alpha[] = "Й";
$alpha[] = "К";
$alpha[] = "Л";
$alpha[] = "М";
$alpha[] = "Н";
$alpha[] = "О";
$alpha[] = "П";
$alpha[] = "Р";
$alpha[] = "С";
$alpha[] = "Т";
$alpha[] = "У";
$alpha[] = "Ф";
$alpha[] = "Ц";
$alpha[] = "Ч";
$alpha[] = "Ш";
$alpha[] = "Щ";
$alpha[] = "Ъ";
$alpha[] = "Ы";
$alpha[] = "Ь";
$alpha[] = "Э";
$alpha[] = "Ю";
$alpha[] = "Я";
$alpha[] = "а";
$alpha[] = "б";
$alpha[] = "в";
$alpha[] = "г";
$alpha[] = "д";
$alpha[] = "е";
$alpha[] = "ё";
$alpha[] = "ж";
$alpha[] = "з";
$alpha[] = "и";
$alpha[] = "й";
$alpha[] = "к";
$alpha[] = "л";
$alpha[] = "м";
$alpha[] = "н";
$alpha[] = "о";
$alpha[] = "п";
$alpha[] = "р";
$alpha[] = "с";
$alpha[] = "т";
$alpha[] = "у";
$alpha[] = "ф";
$alpha[] = "ц";
$alpha[] = "ч";
$alpha[] = "ш";
$alpha[] = "щ";
$alpha[] = "ъ";
$alpha[] = "ы";
$alpha[] = "ь";
$alpha[] = "э";
$alpha[] = "ю";
$alpha[] = "я";
// print_r($alpha);
function mb_str_split($str) {
return preg_split("/(?<!^)(?!$)/u", $str);
}
$text = "abcd 01234 87 01235";
$words = explode(" ", $text);
$result = array();
foreach ($words as $word) {
$chars = array();
$chars = mb_str_split($word);
$count = count($chars);
$i = 0;
$boolean = true;
for ($i = 0; $i < $count - 1; ++$i) {
$x = array_search($chars[$i], $alpha);
$y = $alpha[$x + 1];
if ($y == $chars[$i + 1]) {
continue;
}
else {
$boolean = false;
break;
}
}
if ($boolean) {
$result[] = $word;
}
}
var_dump($result);
echo "</pre></body></html>";
?>
|
Вот решение соответствующее условию задачи. | |
|
|
|
|
|
|
|
для: admiral
(04.11.2010 в 16:35)
| |
<?php
$text = "abcd 01234 87 01235";
$alphanumeric = array (
0 => '0',
1 => '1',
2 => '2',
3 => '3',
4 => '4',
5 => '5',
6 => '6',
7 => '7',
8 => '8',
9 => '9',
10 => 'A',
11 => 'B',
12 => 'C',
13 => 'D',
14 => 'E',
15 => 'F',
16 => 'G',
17 => 'H',
18 => 'I',
19 => 'J',
20 => 'K',
21 => 'L',
22 => 'M',
23 => 'N',
24 => 'O',
25 => 'P',
26 => 'Q',
27 => 'R',
28 => 'S',
29 => 'T',
30 => 'U',
31 => 'V',
32 => 'W',
33 => 'X',
34 => 'Y',
35 => 'Z',
36 => 'a',
37 => 'b',
38 => 'c',
39 => 'd',
40 => 'e',
41 => 'f',
42 => 'g',
43 => 'h',
44 => 'i',
45 => 'j',
46 => 'k',
47 => 'l',
48 => 'm',
49 => 'n',
50 => 'o',
51 => 'p',
52 => 'q',
53 => 'r',
54 => 's',
55 => 't',
56 => 'u',
57 => 'v',
58 => 'w',
59 => 'x',
60 => 'y',
61 => 'z',
62 => 'А',
63 => 'Б',
64 => 'В',
65 => 'Г',
66 => 'Д',
67 => 'Е',
68 => 'Ё',
69 => 'Ж',
70 => 'З',
71 => 'И',
72 => 'Й',
73 => 'К',
74 => 'Л',
75 => 'М',
76 => 'Н',
77 => 'О',
78 => 'П',
79 => 'Р',
80 => 'С',
81 => 'Т',
82 => 'У',
83 => 'Ф',
84 => 'Ц',
85 => 'Ч',
86 => 'Ш',
87 => 'Щ',
88 => 'Ъ',
89 => 'Ы',
90 => 'Ь',
91 => 'Э',
92 => 'Ю',
93 => 'Я',
94 => 'а',
95 => 'б',
96 => 'в',
97 => 'г',
98 => 'д',
99 => 'е',
100 => 'ё',
101 => 'ж',
102 => 'з',
103 => 'и',
104 => 'й',
105 => 'к',
106 => 'л',
107 => 'м',
108 => 'н',
109 => 'о',
110 => 'п',
111 => 'р',
112 => 'с',
113 => 'т',
114 => 'у',
115 => 'ф',
116 => 'ц',
117 => 'ч',
118 => 'ш',
119 => 'щ',
120 => 'ъ',
121 => 'ы',
122 => 'ь',
123 => 'э',
124 => 'ю',
125 => 'я',
);
$result = array();
$words = explode(" ", $text);
function mb_str_split($str) {
return preg_split("/(?<!^)(?!$)/u", $str);
}
foreach ($words as $word) {
// 9ABC или Za или zАБВГ не подходят
if (preg_match("/^[0-9]+$/", $word) or preg_match("/^[a-z]+$/u", $word) or preg_match("/^[A-Z]+$/u", $word) or preg_match("/^[а-я]+$/u", $word) or preg_match("/^[А-Я]+$/u", $word)) {
$chars = array();
$chars = mb_str_split($word);
$count = count($chars);
$boolean = true;
for ($i = 0; $i < $count - 1; ++$i) {
$x = array_search($chars[$i], $alphanumeric);
$y = $alphanumeric[$x + 1];
if ($y == $chars[$i + 1]) {
continue;
}
else {
$boolean = false;
break;
}
}
if ($boolean) {
$result[] = $word;
}
}
}
echo "<html>
<head>
<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\">
</head>
<body>
<pre>";
var_dump($result);
echo "</pre>
</body>
</html>";
?>
|
На выходе:
array(2) {
[0]=>
string(4) "abcd"
[1]=>
string(5) "01234"
}
|
<?php
$text = "ололо я прст гусей";
// ...
|
На выходе:
array(2) {
[0]=>
string(2) "я"
[1]=>
string(8) "прст"
}
|
Автор ты ололо и с тебя 62WMR ггг. | |
|
|
|
|