问题描述
|
如何在没有PHP内置函数的情况下获取字符串1中字符串2出现的计数。
例:
$strone = \"Arun sukumar\";
$strtwo = \"a\";
//Expected Output: 2
$strone = \"Arun sukumar\";
$strtwo = \"uk\";
//Expected Output: 1
我需要不使用任何PHP内置函数就获得计数。
这是面试中提出的问题,这是否有逻辑?
解决方法
您需要花点时间,获取第一个字符。然后遍历干草堆中的每个字符,直到获得匹配为止。然后取下一个针状字符并检查干草堆的下一个字符是否匹配...继续进行直到您完全匹配针状或直到最终匹配一个字符为止。
提示:您可以使用
$string{0}
通过索引访问字符串的各个字符,其中0
是字符串中char的从零开始的索引。
, $strone = \'arun sukumar\';
$strtwo = \'a\';
echo parsestr($strone,$strtwo);
function parsestr($strone,$strtwo)
{
$len = 0;
while ($strtwo{$len} != \'\') {
$len++;
}
$nr = 0;
while ($strone{$nr} != \'\')
{
if($strone{$nr} != \' \')
{
$data[$nr] = $strone{$nr};
}
$nr++;
}
$newdata = $data;
if($len > 1)
{
$newdata = array();
$j = 0;
foreach($data as $val)
{
$str .= $val;
if($j == ($len -1))
{
$newdata[] = $str;
$str = \'\';
$j = 0;
}
else
$j++;
}
}
$i = 0;
foreach($newdata as $val)
{
if($val == $strtwo)
{
$i++;
}
}
return $i;
}
, 尝试这个
$string = \'Arun sukumar\';
$sub_string = \'a\';
$count = 0;
for($i=0;$i < strlen($string); $i++){
$flag = 0;
$j=0;
if(strtolower($string[$i]) == $sub_string[$j])
{
//echo \"match\";
$flag = 1;
$k = $i;
for(;$j< strlen($sub_string); $j++){//echo \"[\".$j . $k.\"] $count $flag\";
if(strtolower($string[$k]) != $sub_string[$j]){
$flag = 0;
break;
}
$k++;
}//echo \"<br> $flag\";
}
if($flag == 1){
$count++;
$flag = 0;
}
}
echo $count;
?>
, 不知道为什么您不希望使用内置的PHP函数,因为它们会更快,但是类似的方法会起作用:
<?php
$haystack = \'Arun sukumar\';
$needle = \'a\';
// you seem to want a case insensitive search,so do a strtolower first
$haystack = strtolower($haystack);
$hitCount = 0;
for ($i = 0; $i < strlen($haystack); ++$i) {
if ($needle === substr($haystack,$i,strlen($needle))) {
$hitCount++;
}
}
echo \'Output: \' . $hitCount;
?>