-3

こんにちは、php の組み込み関数 strtoupper または strtolower を使用せずに、文字列を小文字から大文字に、またはその逆に変換したいのですが、誰か助けてください。

編集:substr()、ord()、chr()、strlen()、str_replaceなど、他の関数を使用して仕事をすることができます。

これはここでの最初の質問だったので、何が必要かを最善の方法で指定できませんでした。配列を使用せずに、これらの関数でジョブを実行するタスクが与えられました。

・・・次は気をつけます。

4

4 に答える 4

3

c 関数は次のようになります。

PHPAPI char *php_strtoupper(char *s, size_t len)
{
    unsigned char *c, *e;

    c = (unsigned char *)s;
    e = (unsigned char *)c+len;

    while (c < e) {
        *c = toupper(*c);
        c++;
    }
    return s;
}

PHPAPI char *php_strtolower(char *s, size_t len)
{
    unsigned char *c, *e;

    c = (unsigned char *)s;
    e = c+len;

    while (c < e) {
        *c = tolower(*c);
        c++;
    }
    return s;
}

これらの関数はC ライブラリからも使用tolowerします! ここのソースを見てくださいtoupperctype.h

于 2013-02-27T12:07:24.510 に答える
2
function myStrToLower($string) {
    $from = range('A','Z');
    $to = range('a','z');
    return str_replace($from, $to, $string);
}

function myStrToUpper($string) {
    $from = range('a','z');
    $to = range('A','Z');
    return str_replace($from, $to, $string);
}
于 2013-02-27T11:55:18.700 に答える
1

なぜあなたがこれをしたいのか想像できませんが。各文字の小文字と大文字を一致させる配列を作成することを検討してください。次に、文字列内のすべての文字について、この配列で見つけて値を返します。(または、他の方向に進む場合はキー)。

組み込み関数にはオーバーヘッドがありますが、この方法はさらにオーバーヘッドがかかると思います。

編集: または、各文字を ascii に変換し、範囲をチェックして大文字か小文字かを確認することもできます。次に、32 (dec) を加算または減算して、別のケースに変更します。

于 2013-02-27T11:52:33.310 に答える
0

可能な実装の 1 つ (str_split を許可する場合) は次のようになります。

function myToLowerCase( $str )
{
    static $charMap = array(
        'A' => 'a', 'B' => 'b', 'C' => 'c', 'D' => 'd', 'E' => 'e', 'F' => 'f',
        'G' => 'g', 'H' => 'h', 'I' => 'i', 'J' => 'j', 'K' => 'k', 'L' => 'l',
        'M' => 'm', 'N' => 'n', 'O' => 'o', 'P' => 'p', 'Q' => 'q', 'R' => 'r',
        'S' => 's', 'T' => 't', 'U' => 'u', 'V' => 'v', 'W' => 'w', 'X' => 'x',
        'Y' => 'y', 'Z' => 'z',
    );
    $chars = str_split( $str );
    $result = '';

    for ( $i = 0; $i < count( $chars ); $i++ )
    {
        if ( isset( $charMap[$chars[$i]] ) )
        {
            $result .= $charMap[$chars[$i]];
        }
        else
        {
            $result .= $chars[$i];
        }
    }

    return $result;
}

大文字に相当するものは、例を見れば明らかです。

于 2013-02-27T12:06:58.097 に答える