繁体   English   中英

检查数字中每个数字的出现

[英]Check occurance of each digit in a number

这是一个检查数字中每个数字出现的代码,除非输入数字中有一个或多个 0,否则它可以正常工作。 有人能指出错误吗?

$input_num = ($_POST["number_text"]);
$freq = array();
for($i=0; $i<10; $i++) {
    $freq[$i] = 0;
}
for($k = 0; $k <= strlen($input_num); $k++) {                           
    $last = $input_num % 10;
    for($j = 0; $j < 10; $j++) {
        if($last == $j) {
            $freq[$j]++;
        }
    }
    $input_num /= 10;
}
print_r($freq);

这里有几个问题:

$input_num /= 10;

这不会像你期望的那样做。 您每次都试图删除字符串的最后一位数字,但您所做的只是除以 10,从而产生一个浮点数。 如果你传入12345 ,你最终不会得到1234 ,而是得到1234.5

如果你使用

$input_num = substr($input_num, 0, -1);

那么你应该得到你想要的。

另一个问题是你的循环条件:

$k <= strlen($input_num);

因为您同时增加$k的大小并减少字符串的大小,所以您最终会在中间相遇,并且只处理一半的字符串。 您需要预先存储长度,而不是在每次迭代时计算它:

$length = strlen($input_num);
for($k = 0; $k < $length; $k++) {

正如其他人在评论和答案中所说的那样,您可以对此进行其他优化(例如,删除内部循环),但这仍然接近您原来的“算法”。 在 PHP 中有更简洁的本地方法可以做到这一点,但我认为您有意避开这些方法。

为什么不使用substr_count来计算每个数字?

$input_num = '00223555';
$freq = [];

for ($i = 0; $i < 10; $i++) {
   $freq[$i] = substr_count($input_num, $i);
}

例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM