Autor Zpráva
Brouček
Profil *
Zdravím,
neporadil by mi někdo jak co nejjednodušeji vymyslet zadání, aby z proměné (uložená slova) bylo vždy druhé písmeno velké?

Třeba zadám slovo "iphone" .. tak aby funkce převedla na "iPhone" nebo "eshop" na "eShop" ?
Taps
Profil
Brouček:
Zadání: Na slova uvedené v proměnné aplikujte funkce, tak aby jste ve výsledku dostali slovo, ve kterém bude na druhé pozici vypsán znak velkým písmenem.
<?php
function prevod($text){
return str_replace($text[1],strtoupper($text[1]),$text);
            }
            
echo prevod("iphone");
?>
Majkl578
Profil
Taps:
To nebude fungovat s UTF-8 (diakritika apod.). Navíc to nesplňuje požadavek - nahrazuješ všechny výskyty znaku na dané pozici, nicméně měnit se má pouze jeden konkrétní.

Tady je multibyte-safe řešení pro zadání v [#1]:
/**
 * Transforms a character to upper case on given position (multibyte-safe). 
 * @param string input
 * @param int offset
 * @return string transformed string
 * @author Majkl578
 */
function transformCharCase($string, $position)
{
    $len = mb_strlen($string);

    if ($position < 0 || $position > $len) throw new \OutOfRangeException('Invalid index');

    $s = $position === 0 ? '' : mb_substr($string, 0, $position); // left side
    $s .= mb_strtoupper(mb_substr($string, $position, 1)); // transformed char
    if ($position < $len - 1) $s .= mb_substr($string, $position + 1); // right side

    return $s;
}

// test
var_dump(transformCharCase('iphone', 1) === 'iPhone');
var_dump(transformCharCase('android', 0) === 'Android');
var_dump(transformCharCase('symbian', 6) === 'symbiaN');
var_dump(transformCharCase('žluťoučký', 3) === 'žluŤoučký');
try { transformCharCase('abc', -5); var_dump(FALSE); } catch (\OutOfRangeException $e) { var_dump(TRUE); }
try { transformCharCase('abc', 5); var_dump(FALSE); } catch (\OutOfRangeException $e) { var_dump(TRUE); }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: