0 votes

Comment supprimer des caractères d'une chaîne de caractères ?

(mon premier message n'était pas clair et prêtait à confusion, j'ai donc modifié la question)

J'étudiais la manipulation des cordes. Vous pouvez utiliser strlen() ou substr() mais ne pouvez pas compter sur d'autres fonctions qui sont prédéfinies dans les bibliothèques.

Chaîne donnée $string = "This is a pen" supprimer "is" de sorte que la valeur de retour soit "Th a pen" (incluant 3 espaces).

Supprimer "est" signifie que si une chaîne est "Tsih", nous ne la supprimons pas. Seul "est" est supprimé.

J'ai essayé (voir ci-dessous) mais la valeur retournée n'est pas correcte. J'ai exécuté le test et Je capture toujours le délimiteur.

Merci d'avance !

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";
}

2voto

Ben Points 6731

Pour clarifier, la question originale n'est pas Implement a str_replace C'est remove 'is' from 'this is a pen' without any functions and no extra white spaces between words . Le moyen le plus simple serait $string[2] = $string[3] = $string[5] = $string[6] = '' mais cela laisserait un espace blanc supplémentaire entre Th y a ( Th[ ][ ]a ).

Et voilà, pas de fonctions du tout

$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] = '';

1voto

FrieK Points 344

Si vous étiez autorisé à utiliser substr(), ce serait tellement plus facile. Ensuite, il suffirait de faire une boucle et de vérifier la valeur correspondante. Pourquoi ne peut-on pas utiliser substr() mais strlen() ?

Mais sans, cela fonctionne au moins :

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

0voto

Liqun Sun Points 7

Le code suivant peut également être utilisé pour remplacer la sous-chaîne :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X