e-4

<?php

//使用PHP语言,使函数LetterChanges(str)
//获得传递的str参数并使用以下算法对其进行修改。
//将字符串中的每个字母替换为字母后面的字母(即 c变成d,z变成a)。
//然后在这个新字符串(a,e,i,o,u)中大写每个元音,最后返回这个修改过的字符串。

//Input:"hello*3"
//
//Output:"Ifmmp*3"
//
//
//Input:"fun times!"
//
//Output:"gvO Ujnft!"

/**
 * 测试写的
 * @param $str
 * @return string
 */
function LetterChanges($str)
{
    $arr = str_split($str); //  将str分割成一个数组
    $newArr = [];
    foreach ($arr as $val) {
        if (ctype_alpha($val)) {
            $newArr [] = ord($val)+1;
        } else {
            $newArr [] = $val;
        }
    }
    $str = '';
    foreach ($newArr as $v) {
        switch ($v) {
            case 97 :
                $str .= chr($v-32);
                break;
            case 101 :
                $str .= chr($v-32);
                break;
            case 105 :
                $str .= chr($v-32);
                break;
            case 111 :
                $str .= chr($v-32);
                break;
            case 117 :
                $str .= chr($v-32);
                break;
            default:
                if (is_numeric($v) && $v > 65) {

                    $str .= chr($v);
                } else {
                    $str .= $v;
                }
        }
    }
    return $str;
}

/**
 * No.1 code
 * @param $str
 * @return string
 */
function LetterChanges1($str) {
    $arr = str_split($str);
    $let = range("a","z");
    $vow = array('a', 'e', 'i', 'o', 'u');
    foreach($arr as $key => $value){
        if(in_array($value,$let)){ // 判断value是否在a-z范围
            // 如果value=z,将value=a,字符串加减会自动转换成对应的ascii码值加减
            $arr[$key] = $value=='z' ? 'a' : ++$value;
            if(in_array($arr[$key],$vow)){ // 如果数组内字母包含在元音字母数组中
                $arr[$key] = strtoupper($arr[$key]); // 就将该字母变成大写
            }
        } else {
            $arr[$key] = $value;
        }
    }
    // code goes here
    return join("",$arr); // 将数组转换成字符串

}

/**
 * No.2 code
 * @param $str
 * @return mixed
 */
function LetterChanges2($str) {

    // code goes here
    $l = strlen($str); // 获取字符串的长度
    for($i=0; $i<$l; $i++)
    {
        $c = ord($str[$i]);
        // 判断字母是不是在a-z|A-Z的范围内
        if(($c >= ord('a') && $c < ord('z')) || ($c >= ord('A') && $c < ord('Z')))
            $c++;
        // 如果加一后的ascii值等z的ascii的值,c的值等于a
        else if($c == ord('z'))
            $c = ord('a');
        else if($c == ord('Z'))
            $c = ord('A');

        $c = chr($c);// 将ascii值转换成字母
        if(in_array($c, ['a','e','i','o','u'])) // 判断字母是不是元音字母
            $c = strtoupper($c); // 将字母转换成大写

        $str[$i] = $c; // 动态添加到数组
    }
    return $str;

}

/**
 * 看完No.1 No.2 写的
 * @param $str
 * @return string
 */
function myCode ($str)
{
    $arr = str_split($str);
    foreach ($arr as $key => $val) {
        $arr[$key] = ($val == 'z') ? 'a' : (($val == 'Z') ? 'A' : ++$val);
        if (in_array($arr[$key], ['a','e', 'i', 'o', 'u'])) {
            $arr[$key] = strtoupper($arr[$key]);
        }
    }
    return implode('', $arr);
}

/**
 * 改测试时写的
 * @param $str
 * @return string
 */
function myCode2($str)
{
    $arr = str_split($str); //  将str分割成一个数组
    $newArr = [];
    foreach ($arr as $val) {
        $val = $val == 'z' ? 'a' : ($val == 'Z' ? 'A' : $val);
        if (ctype_alpha($val)) {
            ++$val;
            if (in_array($val, ['a', 'e', 'i', 'o', 'u'])) {
                $newArr [] = strtoupper($val);
            } else {
                $newArr [] = $val;
            }
        } else {
            $newArr [] = $val;
        }
    }
    return join('', $newArr);
}
//var_dump( LetterChanges('fun times!'));
//var_dump( LetterChanges2('fun times!'));
//var_dump( LetterChanges1('fun times!'));
echo myCode2('fun times!');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值