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

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

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

Друзья, помогите решить такую задача: "Дана последовательность слов. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: буквы слова упорядочены по алфавиту".
PHP только начинаю изучать и мне не совсем понятно, как эту задачу реализовать средствами PHP.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2016, 18:50
Ответы с готовыми решениями:

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

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

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

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

7
Hello Kitty
688 / 561 / 401
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
12.02.2016, 19:50 2
Лучший ответ Сообщение было отмечено 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  [ТС] 3
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
688 / 561 / 401
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
12.02.2016, 20:11 4
php >= 5.4.*
замените на Array()

Добавлено через 1 минуту
PHP
1
 $a=explode("\x20",preg_replace( "#\s{2,}#" , "\x20" , str_replace( Array("\n","\r","\x09") , "\x20" , $s ) ) );
1
1939 / 1763 / 825
Регистрация: 23.01.2014
Сообщений: 6,211
12.02.2016, 20:11 5
Цитата Сообщение от kivalrd Посмотреть сообщение
Пишет: syntax error, unexpected '[', expecting ')'...
Просмотрел, вроде бы все скобки правильно стоят, но почему ругается?
Потому что версия PHP старая слишком... Замените "[" и "]" на "array(" и ")" соовтетственно.
1
0 / 0 / 3
Регистрация: 03.11.2013
Сообщений: 50
12.02.2016, 20:15  [ТС] 6
WhiteMind, всё, работает. Ещё раз спасибо!
0
Hello Kitty
688 / 561 / 401
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
12.02.2016, 20:21 7
еще . замените
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  [ТС] 8
WhiteMind, заменил. Да уж, код, конечно, сложный для моего уровня, пытаюсь его перетравить...
Работает всё, как швейцарские часы!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2016, 20:28

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru