Как получить количество вхождений строки 2 в строку 1 без встроенных функций php - PullRequest
0 голосов
/ 25 июня 2011

Как получить количество вхождений строки 2 в строку 1 без встроенных функций php.

Пример:

$strone = "Arun sukumar";
$strtwo = "a";

//Expected Output: 2


$strone = "Arun sukumar";
$strtwo = "uk";

//Expected Output: 1

Мне нужно получить счетчик без использования встроенных функций php.

Это вопрос, заданный в интервью, есть ли в этом логика?

Ответы [ 4 ]

0 голосов
/ 24 февраля 2017

Попробуйте это

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

?>
0 голосов
/ 25 июня 2011

Вам нужно взять иглу, взять первый символ .. затем итерировать каждый символ стога сена, пока не получите совпадение.Затем возьмите следующий символ иглы и проверьте следующий символ стога сена на предмет соответствия ... продолжайте, пока не получите полное совпадение для иглы или пока вы не наберете совпадение с символом.

подсказка: вы можете получить доступ к отдельным символам строки по индексу с помощью $string{0}, где 0 - это нулевой индекс символа в строке.

0 голосов
/ 28 июня 2011
$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;
}
0 голосов
/ 25 июня 2011

Не знаю, почему вы не хотите использовать встроенные функции 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;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...