0

文字列内の文字をアルファベットの+nの対応する文字に置き換えるにはどうすればよいですか?

たとえば、次のように、各文字を+4の対応する文字に置き換えます。

a b c d e f g h i j k l m n o p q r s t u v w x y z
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
e f g h i j k l m n o p q r s t u v w x y z a b c d

したがって、文字列がある場合は、johnnyになりnslrrcます。

4

4 に答える 4

1
<?php
$str="abcdefghijklmnopqrstuvwxyz";
$length=strlen($str);
$ret = "";
$n=5;
$n=$n-1;
    for($i = 0, $l = strlen($str); $i < $l; ++$i) 
    {
        $c = ord($str[$i]);
        if (97 <= $c && $c < 123) {
            $ret.= chr(($c + $n + 7) % 26 + 97);
        } else if(65 <= $c && $c < 91) {
            $ret.= chr(($c + $n + 13) % 26 + 65);
        } else {
            $ret.= $str[$i];
        }
    }
    echo $ret;
?>

デモ1(例:abcdefghijklmnopqrstuvwxyz)

デモ2(例:johhny)

于 2013-03-26T22:01:01.847 に答える
1

これは方法です:

<?php

$newStr = "";
$str = "johnny";

define('DIFF', 4);
for($i=0; $i<strlen($str); $i++) {        
    $newStr .= chr((ord($str[$i])-97+DIFF)%26+97);
}
于 2013-03-26T22:05:08.343 に答える
1

次のコマンドを使用して、文字ごとに置き換えることができますstrtr()

$shiftBy = 4;
$alphabet = 'abcdefghijklmnopqrstuvwxyz';

$newAlpha = substr($alphabet, $shiftBy) . substr($alphabet, 0, $shiftBy);

echo strtr("johnny", $alphabet, $newAlpha);

// nslrrc

もちろん、これはあなたの例のようにすべて小文字を想定しています。首都は物事を複雑にします。

http://codepad.viper-7.com/qNLli2

ボーナス:負のシフトでも機能します

于 2013-03-26T22:08:11.200 に答える
-1

文字の配列を作成します。array [$ key]値の文字ごとに、array [$ key+4]をエコーし​​ます。$ key + 4が配列のサイズよりも大きい場合は、いくつかの基本的な計算を実行し、それを転送して開始します。

于 2013-03-26T22:04:24.403 に答える