Bir dizeden karakterleri kaldırmak için nasıl?

3 Cevap php

(Benim ilk yazı net ve kafa karıştırıcı değildi bu yüzden soruyu kaydetmiştiniz)

I was studying string manipulation. You can use strlen() or substr() but cannot rely on other functions that are predefined in libraries.

Given string $string = "This is a pen", remove "is" so that return value is "Th a pen" (including 3 whitespaces).

Kaldır bir dize "Tsih" ise, bunu kaldırmak yok demektir 'edilir'. Sadece kaldırılır "dir".

I've tried (shown below) but returned value is not correct. I've run test test and I'm still capturing the delimiter.

Şimdiden teşekkürler!

function remove_delimiter_from_string(&$string, $del) {
    for($i=0; $i<strlen($string); $i++) {
        for($j=0; $j<strlen($del); $j++) {
            if($string[$i] == $del[$j]) {
                $string[$i] = $string[$i+$j]; //this grabs delimiter :(
            }
        }
    }
    echo $string . "\n";
}

3 Cevap

Eğer substr kullanmak için izin verildi eğer () çok daha kolay olurdu. Sonra o ve eşleşen değer için kontrol, neden (substr sadece döngü kullanabilirsiniz edemem olabilir) ama strlen () olabilir?

Ancak olmadan, bu en azından çalışır:

echo remove_delimiter_from_string("This is a pen","is");

function remove_delimiter_from_string($input, $del) {
    $result = "";
    for($i=0; $i<strlen($input); $i++) {
        $temp = "";
        if($i < (strlen($input)-strlen($del))) {
            for($j=0; $j<strlen($del); $j++) {
                $temp .= $input[$i+$j];
            }
        }
        if($temp == $del) {
            $i += strlen($del) - 1;
        } else {
            $result .= $input[$i];
        }
    }
    return $result;
}

Netleştirilmesi, orijinal quiestion değil Implement a str_replace, O remove 'is' from 'this is a pen' without any functions and no extra white spaces between words bulunuyor. Kolay yolu $string[2] = $string[3] = $string[5] = $string[6] = '' olurdu ama bu Th ve a arasında bir ekstra beyaz boşluk bırakacaktı (Th[ ][ ]a).

Orada hiç, hiçbir işlevleri gitmek

$string = 'This is a pen';
$word = 'is';
$i = $z = 0;

while($string[$i] != null) $i++;
while($word[$z] != null) $z++;

for($x = 0; $x < $i; $x++) 
 for($y = 0; $y < $z; $y++)
  if($string[$x] === $word[$y])
   $string[$x] = '';

Aşağıdaki kodu da alt dizesini değiştirmek için kullanılabilir:

$restring = replace_delimiter_from_string("This is a pen","is", "");
var_dump($restring);
$restring = replace_delimiter_from_string($restring,"  ", " ");
var_dump($restring);

function replace_delimiter_from_string($input, $old, $new) {
    $input_len = strlen($input);
    $old_len = strlen($old);
    $check_len = $input_len-$old_len;

    $result = "";
    for($i=0; $i<=$check_len;) {
        $sub_str = substr($input, $i, $old_len);
        if($sub_str === $old) {
            $i += $old_len;
            $result .= $new;
        }
        else {
            $result .= $input[$i];
            if($i==$check_len) {
                $result = $result . substr($input, $i+1);
            }
            $i++;
        }
    }
    return $result;
}