Home > Backend Development > PHP Tutorial > php面试题 - 一道PHP面试的编程题

php面试题 - 一道PHP面试的编程题

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-06 20:28:13
Original
1767 people have browsed it

请编写一个函数

我们工作里使用的的语言是PHP,希望阁下能以PHP作答。若有困难,亦可使用其他语言完成。(如C#、Java、C++、Python、Perl、Ruby等)

要求

输入参数–一个字符串,返回一个字符串。
输入是一句英文句子,只有英文字(a-z, A-Z)、每个字之间仅以一个空格分格,前后没有空格。
返回的是要把每一个字的字母顺序倒转写,但字的顺序和字母的大小写位置则保持不変

示例

输入参数
This is an Apple on eBay

返回
Siht si na Elppa no yAbe
(如eBay因为是第二个字母大写,倒写后保持第二个字母的大写。)

回复内容:

请编写一个函数

我们工作里使用的的语言是PHP,希望阁下能以PHP作答。若有困难,亦可使用其他语言完成。(如C#、Java、C++、Python、Perl、Ruby等)

要求

输入参数–一个字符串,返回一个字符串。
输入是一句英文句子,只有英文字(a-z, A-Z)、每个字之间仅以一个空格分格,前后没有空格。
返回的是要把每一个字的字母顺序倒转写,但字的顺序和字母的大小写位置则保持不変

示例

输入参数
This is an Apple on eBay

返回
Siht si na Elppa no yAbe
(如eBay因为是第二个字母大写,倒写后保持第二个字母的大写。)

这样有意义吗?

<code>function revStr($str)
{
    $str2 = implode(" ", array_map("strrev", explode(" ", $str)));
    $len = strlen($str);
    while ($len > 0) {
        $str2{$len - 1} = ord($str{$len - 1}) </code>
Copy after login

http://segmentfault.com/q/1010000002547110/a-1020000002547831

先用$arr=explode('',$input)分割这个字符串,
然后将数组翻过来array_reverse()
然后遍历$arr
用$a=substr($arr[0],0,1)截取

if(preg_match('/^[a-z]+$/', $a)){
            echo '小写字母';
            $a=strtoupper($a)
}elseif(preg_match('/^[A-Z]+$/', $a)){
            echo '大写字母';
            $a = strtolower($a)
}
Copy after login

然后拼起来就完成了

我也来一个,比@util的稍微快点:)

function revStr(&$str) {
    $offset = 0;
    $isEnd = false;
    while(!$isEnd){
        $spacePos = strpos($str, ' ', $offset);
        if($spacePos === false){
            $spacePos = strlen($str);
            $isEnd = true;
        }
        
        $wordLen = $spacePos - $offset;
        $wordLenHalf = $wordLen >> 1;
        for ($j = 0; $j < $wordLenHalf; $j++) {
            $diff = 0;
            $charPos = $offset + $j;
            $charPosRev = $spacePos - $j - 1;
            $charASCII = ord($str[$charPos]);
            $charASCIIRev = ord($str[$charPosRev]);
            $diff += ($charASCII <= 90) ? -16 : 16;
            $diff += ($charASCIIRev <= 90) ? 16 : -16;
            if($diff){
                $str[$charPos] = chr($charASCIIRev + $diff);
                $str[$charPosRev] = chr($charASCII - $diff);
            }else{
                $tmp = $str[$charPos];
                $str[$charPos] = $str[$charPosRev];
                $str[$charPosRev] = $tmp;
            }
        }
        $offset += $wordLen+1;
    }
}

$str = 'This is an Apple on eBay';
revStr($str); 
echo $str;// Siht si na Elppa no yAbe
Copy after login
Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
php data acquisition?
From 1970-01-01 08:00:00
0
0
0
PHP extension intl
From 1970-01-01 08:00:00
0
0
0
How to learn php well
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template