За последние 24 часа нас посетили 22796 программистов и 1561 робот. Сейчас ищут 910 программистов ...

Помогите решить задачи

Тема в разделе "PHP для новичков", создана пользователем Алексей87К, 6 янв 2017.

Метки:
  1. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    1) Дана строка. С помощью цикла удалите из нее каждый третий символ.

    2) Дана строка. С помощью цикла выведите символы этой строки в обратном порядке.

    3) Сделайте функцию, которая принимает строку на русском языке, а возвращает ее транслит. Сделайте также функцию, которая выполняет обратную операцию.
    Спасибо!
     
  2. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Идеи то какие есть?
     
  3. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Пришёл с другого форума, там дошёл до решение одной задачи) (здесь она не представлена) Над этими надо подумать. Идея есть ко второй задачи. Найти функцию посимвольно разбивающая строку, а затем, с помощью цикла написать символы начиная с последнего. Осталось теперь только это реализовать!
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    так, отлично, ты на верном пути. Какой поисковый запрос поможет тебе найти ответ на этот вопрос? Подумай, может ли такая функция помочь с решением первой задачи.
    напиши в яндексе "php обратный цикл" и посмотри пример. Если будут вопросы - задавай.
     
  5. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    2) Дана строка. С помощью цикла выведите символы этой строки в обратном порядке.
    PHP:
    1. $text = 'Hello';
    2. for($i = mb_strlen($text); $i > -1; $i--){
    3.     $new_text .= $text[$i];
    4. }
    5. echo $new_text;
    --- Добавлено ---
    Решил!
    PHP:
    1. $text = 'Hello';
    2. for($i = mb_strlen($text); $i > -1; $i--){
    3.     $new_text .= $text[$i];
    4. }
    5. echo $new_text;
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    молодец. Теперь вот тебе ещё кое что. В пхп много встроенных функций, почти на все случаи жизни. Например вот эта https://php.ru/manual/function.strrev.html
     
  7. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Спасибо! Да, знаю, что они существуют, но в задании было требование работать с циклами.Но всё равно спасибо) ... Пока не получается с этой задачей: "Дана строка. С помощью цикла удалите из нее каждый третий символ." Непонятно пока, как должно выглядеть условие for, чтобы удалялся каждый 3-й символ. Второе, какая функция его удаляет)
    PHP:
    1. $text = 'Hello';
    2.     $count = 0;
    3. for($i = 0; $i < mb_strlen($text); $i++){
    4.    $count++;
    5.    if($count == 3)# я не могу так написать, поскольку акцент делаю не на каждом 3, а только на третьем! А как написать для каждого третьего?
    6. }
     
    #7 Алексей87К, 6 янв 2017
    Последнее редактирование: 6 янв 2017
  8. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Почему не можешь? Ты вне цикла объявил переменную каунт и присвоил ей значение 0. В цикле при каждой итерации увеличиваешь её значение. Ты в верном направлении, всё делаешь почти как надо.
    Моментов несколько:
    1. Может не удалять надо? Просто собираешь новую строку из символов, если это не третий символ. А насчёт третьего, с переменной у тебя всё правильно. Просто обнуляй её, если она равна 3. (Ну правда не 3, а 2, ты же с 0 начинаешь)
     
  9. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    PHP:
    1. $text = 'Hello';
    2.     $count = 0;
    3. for($i = 0; $i < mb_strlen($text); $i++){
    4.    $count++;
    5.    if($count == 3){# я не могу так написать, поскольку акцент делаю не на каждом 3, а только на третьем! А как написать для каждого?
    6.                   #удаляем символ, пока правда не знаю как!
    7.       $count = 0; # Обнуляем, для того, чтобы if работал
    8.   }
    9. }
    --- Добавлено ---
    Спасибо большое за подсказку!!! Решил!!! Действительно, зачем удалять, когда можно собирать)) Вот код:
    PHP:
    1. $text = 'Hellogirls';
    2.     $count = 0;
    3. for($i = 0; $i < mb_strlen($text); $i++){
    4.     $count++;
    5.    if($count == 3){
    6.          $count = 0;
    7.    }else{
    8.       $new_text .= $text[$i];
    9.    }
    10. }
    11. echo $new_text;
    Всё, пора спать! Не знаю сколько у вас, а у меня скоро 6 утра) Но теперь я спокоен! А то, на меня накинулись на других форумах, весь сон отбили, пока не решил несколько задач)
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @Алексей87К
    надо узнать, когда счётчик кратен трём

    потом загуглить "php удалить член массива"
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    НЕ будет работать применительно к строке. Возможность обращения к символу в строке по индексу - это вообще полукостыль. Который не будет работать с мультибайтовой кодировкой, кстати.
    --- Добавлено ---
    Автор, молодец. Обычно те, кто приходят с проблемой, как у тебя, тупо клянчат решение. Чтоб человек с подсказок и наводящих вопросов сам смог накодить приемлемое решение - это, к сожалению, редкость :(
     
    Алексей87К нравится это.
  12. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    PHP:
    1. <?php
    2.  
    3. $text = 'Hellogirls';
    4. $new_text='';
    5. for($i = 0; $i < mb_strlen($text); $i=$i+3){
    6.       $new_text .= $text[$i];
    7.  
    8. }
    9. echo $new_text;
    10. ?>
    ой чего это я такое сделал ..
    а че шаг ведь можно и через 3 сразу делать
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.596
    Симпатии:
    1.764
    Ты не удаляешь , а собираешь символы, и очерёдность (каждый 3) не соблюдена :)
    Твой цикл возмёт 1 символ, потом 4 символ, потом 7 символ,
     
  14. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а да .. ему надо выковорить каждый 3 .. от празников не отойду никак =)
    --- Добавлено ---
    а вот этого в инете просто немеряно ..
    http://htmlweb.ru/php/example/translit.php

    PHP:
    1. function transliterate($st) {
    2.   $st = strtr($st,
    3.     "абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ",
    4.     "abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE"
    5.   );
    6.   $st = strtr($st, array(
    7.     'ё'=>"yo",    'х'=>"h",  'ц'=>"ts",  'ч'=>"ch", 'ш'=>"sh",
    8.     'щ'=>"shch",  'ъ'=>'',   'ь'=>'',    'ю'=>"yu", 'я'=>"ya",
    9.     'Ё'=>"Yo",    'Х'=>"H",  'Ц'=>"Ts",  'Ч'=>"Ch", 'Ш'=>"Sh",
    10.     'Щ'=>"Shch",  'Ъ'=>'',   'Ь'=>'',    'Ю'=>"Yu", 'Я'=>"Ya",
    11.   ));
    12.   return $st;
    13. }
    14. echo transliterate("У попа была собака, он ее любил.");
     
    Алексей87К нравится это.
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    и да делать вот так:
    Не здорово.
    Ты на каждой итерации дергаешь функцию, чтобы получать одно и то же число каждый раз.
    попробуй так:
    PHP:
    1. for($i=0, $limit = mb_strlen($text); $i<$limit; $i++){
    Получать длину во второй секции можно, разве что, в случае, если длина является свойством объекта, а не результатом функции.
     
  16. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Выражаю вам большую благодарность за проявленное терпение и помощь!!! Вы не только помогли найти правильное решение, но и тактично указали как не надо делать! Отныне я не буду вываливаться со списком вопросов, а буду обращаться с не работающим кодом и комментарием своих действий или описанием проблем. Жаль, что я допустил такую ошибку сразу в 4-х форумах! Но зато, получил огромный опыт)
    --- Добавлено ---
    Огромное спасибо!!!
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Все правильно. Добро пожаловать :)
     
  18. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Огро
    Спасибо))
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не спойлери :D

    Да, @Алексей87К чувак ты молодец!
    --- Добавлено ---
    не за что.

    Ты работаешь или учишься?
    --- Добавлено ---
    @Алексей87К
    к твоей борьбе с задачами присоединилась куча участников форума. Это именно потому, что они видят, что ты сам думаешь и пытаешься. Молодец.
     
    acho и denis01 нравится это.
  20. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Огромное спасибо всем за понимание! По поводу того, работаю я или учусь, то сейчас больше учусь! Пока что я больше верстальщик, но хочу овладеть backendОМ )
    --- Добавлено ---
    Ребята, подскажите пожалуйста? Не знаю, как выделить оба элемента в массиве. Я из строки сделал массив, чтобы решить данную задачу, но я не знаю, как выделить все элементы. Спасибо!
    42. Дана строка. Сделайте заглавным последний символ каждого слова этой строки не используя цикл.
    PHP:
    1. $str = 'have pencil';
    2. $arr = explode(' ', $str);
    3. $new = mb_strtoupper(substr($arr[0], 0, 1)); # но я тем самым выделяю только первый элемент. Пробовал и так: $arr[strlen($str)]
    4. var_dump($new);
     
    #20 Алексей87К, 10 янв 2017
    Последнее редактирование модератором: 10 янв 2017
  21. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Нет, это не правильно! Я же здесь выделяю один символ. А мне нужно слово с заглавной последней буквой, точнее слова. У есть меня другой алгоритм решении. С начала разбиваем строку в массив $str = 'have pencil';
    $arr = explode(' ', $str); Затем какой-то функцией добавляем каждый элемент массива в переменную (Я не знаю какой, прошу подскажите!!!) и преобразовываем каждую строковую переменную через эти функции)) - mb_strtoupper(substr($переменная, -1)) и потом эти строки складываем и присваиваем новой переменной! Только всё это как то по деревянному. Есть ли более простой способ?
    P.S. Повторяю задачу: Дана строка. Сделайте заглавным последний символ каждого слова этой строки не используя цикл.
    --- Добавлено ---
    Огромное спасибо за понимание и за помощь!!!
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в массив добавлять просто так:
    PHP:
    1. $arr = [];
    2. $arr[] = 'str1';
    3. $arr[] = 'str2';
    --- Добавлено ---
    а это зачем?
    --- Добавлено ---
    а, понял.

    суть в том, что применить действия в цикле но не в цикле можно только через array_walk() или array_map(), это я сразу говорю, потому что хрен знает, как бы ты это смог найти. Возможно вы это проходили.
     
  23. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Огромное спасибо за понимание и за помощ
    Спасибо большое!!! Вы меня снова выручили!!! Я правда не до конца понял функцию array_walk, но смог выполнить через array_map!
    PHP:
    1. function my($x){
    2.     return ucfirst($x);
    3. }
    4.  
    5. $str = 'have pencil';
    6. $arr = explode(' ', $str);
    7. $new =  array_map('my', $arr);
    8. var_dump($new);
    Правда в своей функции я использовал другую функцию, не та, что по заданию, но для меня главное было чтоб работал сам механизм! Интересно... У меня на выходе получился массив. А в забить элементы массива в разные переменные, с целью дальнейшей их конкатенации в новую? Такая функция существует?
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    explod() разбивает, implode() склеивает
     
    denis01 нравится это.
  25. Алексей87К

    Алексей87К Новичок

    С нами с:
    5 янв 2017
    Сообщения:
    157
    Симпатии:
    4
    Благодарю!
     
    denis01 нравится это.