当前位置: 首页 > 知识库问答 >
问题:

PHP无法断言两个字符串相等

左丘源
2023-03-14

我在Codewars.com参加培训测试,

说明是:

  • 在此kata中,您必须在给定字符串的情况下,用字母在字母表中的位置替换每个字母。
  • 如果文本中的任何内容不是字母,请忽略它,不要返回它。“A”=1,“B”=2.

我已经制作了这样的PHP脚本

<?php
function alphabet_position($string) 
{
    $lower = strtolower($string);
    $alphabet = range("a", "z");
    $result = "";

    for ($i=0; $i<strlen($lower); $i++)
    {
      $filter = array_search($lower[$i], $alphabet);
      if ($filter)
        {
          $result .= $filter+1 ." ";
        }
    }
    
    return $result;
}

echo alphabet_position('The sunset sets at twelve o\'clock');
//output 20 8 5 19 21 14 19 5 20 19 5 20 19 20 20 23 5 12 22 5 15 3 12 15 3 11

但当我提交我的答案时,它包含的错误就像

Time: 937msPassed: 0Failed: 1Exit Code: 1
Test Results:
Log
PHPUnit 9.1.1 by Sebastian Bergmann and contributors.
AlphabetPositionTest
testFixed
Failed asserting that two strings are equal.
Expected: '20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11'
Actual  : ''
Completed in 23.3161ms

请谁能帮忙修一下?告诉我为什么它显示错误的细节?

共有2个答案

何松
2023-03-14

只是一个替代方案,它不再需要搜索“字母表”来检查字符。使用ord()给出字符的ascii值,这是一个简单的翻译。然后用A的值抵消它,使字符...

function alphabet_position($string)
{
    $lower = strtolower($string);
    $result = "";

    for ($i=0; $i<strlen($lower); $i++)
    {
        if ( $lower[$i] >= 'a' && $lower[$i] <= 'z' )   {
            $result .= (ord($lower[$i]) - ord('a'))+1 ." ";
        }
    }

    return $result;
}
欧阳飞
2023-03-14

如果一个字符是aarray_search()将返回0If($filter)将忽略它,就好像(0)是false一样。因此,您可以使用严格的类型检查来避免这个问题。

<?php
function alphabet_position($string) {
    $lower = strtolower($string);
    $alphabet = range("a", "z");
    $result = "";

    for ($i=0; $i < strlen($lower); $i++)
    {
      $filter = array_search($lower[$i], $alphabet);
      if ($filter !== false){ // always have strict type check as array index can also be 0
          $result .= $filter + 1 ." ";
      }
    }
    
    return $result;
}
 类似资料:
  • 本文向大家介绍js中怎么判断两个字符串相等的实例,包括了js中怎么判断两个字符串相等的实例的使用技巧和注意事项,需要的朋友参考一下 在javascript判断两个变量值是否相等,可以使用 ==(等同)操作符 或者 ===(恒等)操作符 == 操作符 “等同”操作符,简单判断2个变量值是否相等,变量类型不一致时,会做类型转换,即忽略变量的类型进行比较 例子1 var str1 = "123456"

  • 本文向大家介绍在C语言中比较两个字符串是否相等的方法,包括了在C语言中比较两个字符串是否相等的方法的使用技巧和注意事项,需要的朋友参考一下 C语言strcmp()函数:比较字符串(区分大小写) 头文件:#include <string.h> strcmp() 用来比较字符串(区分大小写),其原型为: 【参数】s1, s2 为需要比较的两个字符串。 字符串大小的比较是以ASCII 码表上的顺序来决定

  • 本文向大家介绍PHP判断一个字符串是否是回文字符串的方法,包括了PHP判断一个字符串是否是回文字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP判断一个字符串是否是回文字符串的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: 为什么以下语句返回? 我也尝试过在字符串周围使用单引号。我唯一可以评估的方法是使用运算符,而不是 我的猜测是PHP将它视为某种方程式,但似乎有些奇怪。 有人可以详细说明吗? 问题答案: 是float数字格式,因此它们在比较时将转换为数字。 并且都将是因为它们太小。 对于在php中, 如果将数字与字符串进行比较,或者比较涉及 数字字符串 ,则每个字符串将转换为 数字 ,然后以数字方式进行

  • 本文向大家介绍PHP判断字符串长度的两种方法很实用,包括了PHP判断字符串长度的两种方法很实用的使用技巧和注意事项,需要的朋友参考一下 php程序中字符串长度判断,可以使用strlen。 方法一: 方法二: 以上两种方法,第二种效率更高些。 在PHP中,所有的变量都是用一个结构-zval来保存的,strlen虽然是直接获取其中的len,但是仍然有一次函数调用,而isset是PHP的语法结构,所以更

  • 我一直在试图解决这个面试问题,它要求洗牌字符串,以便没有两个相邻的字母是相同的,例如, ABCC->ACBC 我想到的方法是 1)遍历输入字符串并将(字母、频率)对存储在某个集合中 2)现在通过拉取频率最高(即>0)的字母来构建一个结果字符串 3)每当我们拉一封信时,更新(减少)频率 4)如果所有字母的频率为零,则返回结果字符串 5)如果只剩下一个频率大于1的字母,则返回错误 我假设是Unicod