Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 3
Регистрация: 03.11.2013
Сообщений: 50

Напечатать те слова, которые отличны от последнего слова и буквы слова упорядочены по алфавиту

12.02.2016, 18:50. Показов 2019. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, помогите решить такую задача: "Дана последовательность слов. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: буквы слова упорядочены по алфавиту".
PHP только начинаю изучать и мне не совсем понятно, как эту задачу реализовать средствами PHP.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2016, 18:50
Ответы с готовыми решениями:

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

Дана последовательность символов. Напечатать все слова, отличные от слова
Дана последовательность символов. Напечатать все слова, отличные от слова hello.

Нужно напечатать слова, что отличаются от последнего и начинаются с первых букв алфавита
Есть строка с словами. Суть в том, что мне нужно вывести те слова, которые не похожи на последнее слово и начинаются с букв a, b, c, d. ...

7
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
12.02.2016, 19:50
Лучший ответ Сообщение было отмечено kivalrd как решение

Решение

PHP
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function p($s,$enc="UTF-8") {
    foreach (range(chr(224), chr(255)) as $c)   { $rusL[] = iconv('CP1251', $enc, $c); }
    foreach (range(chr(0xC0), chr(0xDF)) as $c) { $rusH[] = iconv('CP1251', $enc, $c); }
    $rusLK = array_flip($rusL);
    $rusHK = array_flip($rusH);
 
    $a=explode("\x20",preg_replace( "#\s{2,}#" , "\x20" , str_replace( ["\n","\r","\x09"] , "\x20" , $s ) ) );
    list($lword) = array_splice($a , -1);
    foreach( $a as $sr) {
        if ( $sr === $lword ) {
            continue;
        }
        $tid = -1;
        $trg = false;
        $wr_prev = false;
        for($i=0,$len=mb_strlen($sr , $enc); $i<$len; $i++) {
            $ch = mb_substr($sr , $i , 1);
            if ( ($wr_prev === false) ) {
                if ( isset($rusLK[$ch]) ) { $trg = $rusL; $tid = $rusLK[$ch]; } 
                elseif ( isset($rusHK[$ch]) ) { $trg = $rusH; $tid = $rusLK[$ch]; }
                if ( $trg ) {
                    for($i++,$tid++; $i<$len; $i++,$tid++) {
                        $ch = mb_substr($sr , $i , 1);
                        if ( $ch !== @$trg[$tid] ) {
                            continue 3;
                        }
                    }
                    echo $sr,"<br/>";
                    continue 2;
                }
            }
            $wr = unpack("N" , substr("\x00\x00\x00\x00".$ch,-4));
            $wr = $wr[1];
            if ( ( $wr_prev !== false ) && ( $wr_prev + 1 !== $wr ) ) {
                continue 2;
            }
            $wr_prev = $wr;
        }
        echo $sr,"<br/>";
    }
}
 
 
 
echo p('абвгдежз абвгдежз опрст абвгдежз 01234 err abcd lwrod' );
15 минут думал как это сделать. возможны ошибки( с языком отличным от рус/англ ошибки будут ). мб есть более простое решение но я его не знаю.

Добавлено через 13 минут
PHP
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function p($s,$enc="UTF-8") {
    foreach (range(chr(224), chr(255)) as $c)   { $rusL[] = iconv('CP1251', $enc, $c); }
    foreach (range(chr(0xC0), chr(0xDF)) as $c) { $rusH[] = iconv('CP1251', $enc, $c); }
    $rusLK = array_flip($rusL);
    $rusHK = array_flip($rusH);
 
    $a=explode("\x20",preg_replace( "#\s{2,}#" , "\x20" , str_replace( ["\n","\r","\x09"] , "\x20" , $s ) ) );
    list($lword) = array_splice($a , -1);
    foreach( $a as $sr) {
        if ( $sr === $lword ) {
            continue;
        }
        $tid = -1;
        $trg = false;
        $wr_prev = false;
        for($i=0,$len=mb_strlen($sr , $enc); $i<$len; $i++) {
            $ch = mb_substr($sr , $i , 1);
            if ( ($wr_prev === false) ) {
                if ( isset($rusLK[$ch]) ) { $trg = $rusL; $tid = $rusLK[$ch]; } 
                elseif ( isset($rusHK[$ch]) ) { $trg = $rusH; $tid = $rusHK[$ch]; }
                if ( $trg ) {
                    for($i++,$tid++; $i<$len; $i++,$tid++) {
                        $ch = mb_substr($sr , $i , 1);
                        if ( $ch !== @$trg[$tid] ) {
                            continue 3;
                        }
                    }
                    echo $sr,"<br/>";
                    continue 2;
                }
            }
            $wr = unpack("N" , substr("\x00\x00\x00\x00".$ch,-4));
            $wr = $wr[1];
            if ( ( $wr_prev !== false ) && ( $wr_prev + 1 !== $wr ) ) {
                continue 2;
            }
            $wr_prev = $wr;
        }
        echo $sr,"<br/>";
    }
}
 
echo p('абвгдежз абвгдежз АБВГД оп абвгдежз abcd lwrod' );
в прошлой версии опечатка и заглавные рус. буквы не обрабатывались
1
0 / 0 / 3
Регистрация: 03.11.2013
Сообщений: 50
12.02.2016, 20:02  [ТС]
WhiteMind, ого, спасибо огромное! Я уже третий день над этой задачей бьюсь...
Попробую теперь разобраться с этим кодом.

Правда ругается на эту строчку:
PHP
1
$a=explode("\x20",preg_replace( "#\s{2,}#" , "\x20" , str_replace( ["\n","\r","\x09"] , "\x20" , $s ) ) );
Пишет: syntax error, unexpected '[', expecting ')'...
Просмотрел, вроде бы все скобки правильно стоят, но почему ругается?
0
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
12.02.2016, 20:11
php >= 5.4.*
замените на Array()

Добавлено через 1 минуту
PHP
1
 $a=explode("\x20",preg_replace( "#\s{2,}#" , "\x20" , str_replace( Array("\n","\r","\x09") , "\x20" , $s ) ) );
1
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
12.02.2016, 20:11
Цитата Сообщение от kivalrd Посмотреть сообщение
Пишет: syntax error, unexpected '[', expecting ')'...
Просмотрел, вроде бы все скобки правильно стоят, но почему ругается?
Потому что версия PHP старая слишком... Замените "[" и "]" на "array(" и ")" соовтетственно.
1
0 / 0 / 3
Регистрация: 03.11.2013
Сообщений: 50
12.02.2016, 20:15  [ТС]
WhiteMind, всё, работает. Ещё раз спасибо!
0
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
12.02.2016, 20:21
еще . замените
PHP
1
mb_substr($sr , $i , 1)
на
PHP
1
mb_substr($sr , $i , 1, $enc)
0
0 / 0 / 3
Регистрация: 03.11.2013
Сообщений: 50
12.02.2016, 20:28  [ТС]
WhiteMind, заменил. Да уж, код, конечно, сложный для моего уровня, пытаюсь его перетравить...
Работает всё, как швейцарские часы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2016, 20:28
Помогаю со студенческими работами здесь

Напечатать те слова текста, которые отличны от последнего слова и в которых буквы упорядочены по алфавиту
Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать те слова...

Напечатать те слова последовательности, которые отличны от последнего слова и буквы слова упорядочены
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами -- не...

Напечатать слова, которые отличны от последнего и буквы которых упорядочены по алфавиту
Помогите решить задачу. Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв;...

Напечатать те слова последовательности, которые отличны от первого слова, и их буквы не упорядочены по алфавиту
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не...

Напечатать те слова, которые отличны от последнего и симметричны / буквы слова расположены по алфавиту
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru