【问题标题】:php upper and lowercase without built in function [closed]php大写和小写没有内置函数[关闭]
【发布时间】:2013-02-27 11:49:15
【问题描述】:

大家好,我想在不使用 php 中的任何内置函数 strtoupper 或 strtolower 的情况下将字符串从小写转换为大写,反之亦然,谁能帮帮我。

编辑:我可以使用其他一些函数来完成这项工作,例如 substr()、ord()、chr()、strlen()、str_replace。

这是我在这里的第一个问题,所以无法以最佳方式指定我需要什么。 我的任务是在不使用数组的情况下完成这些提到的函数。

...下次我会小心的。

【问题讨论】:

  • 你能解释一下为什么你不想使用内置函数吗?
  • 看看c源代码就知道它是如何工作的了
  • ASCII 值减或加 32!切换第 6 位。
  • 切换第 6 位可能是最好的解决方案。整个问题是荒谬的、琐碎的或学术的。 ...投票否决
  • 你尝试了什么?你发现了什么错误?你做了什么研究?为什么你不想使用 PHP 内置函数?总的来说,这不是一个好问题。否决

标签: php uppercase lowercase built-in


【解决方案1】:

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;
}

但这些函数也使用来自ctype.h C 库的tolowertoupper! 看源码here

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

    • rangestr_replace 是内置函数...编辑:好的,OP 编辑​​了他的问题
    【解决方案3】:

    虽然我无法想象你为什么要这样做;您可以考虑制作一个将每个字母的小写字母与大写字母匹配的数组。然后对于字符串中的每个字符,在这个数组中找到它并返回值。 (或者如果你要去另一个方向,那就是钥匙)。

    虽然内置函数有开销,但我认为这种方法仍然会产生更多开销。

    编辑:或者,您可以将每个字符转换为 ascii,然后检查范围以查看它是大写还是小写。然后加上或减去 32 (dec) 以更改为另一种情况。

    【讨论】:

      【解决方案4】:

      一种可能的实现方式(如果您允许 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-10-24
        • 2016-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多