• 09 Avril 2025, 08:56:14


Auteur Sujet: Remplacer un caractère par un autre  (Lu 1675 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Romeo_Urbano

  • *
  • Tueur en série
  • Messages: 128
    • Voir le profil
Remplacer un caractère par un autre
« le: 13 Mai 2014, 20:12:56 »
Bonjour tous le monde, je postes un nouveau message car je trouves pas la solution d'un truc même après avoir tester pleins de truc.

mon idée est facile:

Par exemple j'ai le message suivant "Salut je m'appel Romeo, j'ai changé mon prénom Romeo car j'aimais pas Romeo"

dans le code c'est écrit comme ça:

format(string, sizeof(string), "Salut je m'appel Romeo, j'ai changé mon prénom Romeo car j'aimais pas Romeo");
et se que je veux c'est que le script prend le message et change tout les "Romeo qui sont dans le texte et les changent par Walter.

en PHP c'est comme ça $string = str_replace("Romeo","Walter",$string);

Mais en pawno, je sais pas comment faire, j'ai testé le

string[strfind(string,"Romeo")] = 'Walter ';
mais ça marche pas, et j'ignore pourquoi :/

j'espère que j'étais clair et merci d'avance pour votre aide! à la prochaine
« Modifié: 24 Mai 2014, 08:53:43 par Gzsume »

Hors ligne CarCrasher

  • *
  • Tueur en série
  • Messages: 144
    • Voir le profil
Re : Remplacer un caractère par un autre
« Réponse #1 le: 13 Mai 2014, 21:57:30 »
Alors voilà mon analyse

La fonction strfind ne renvoie pas toutes les cases de la chaine où elle a trouvé le string recherché, mais le nombre de cases avant.

Donc je te conseillerais une petite boucle "do while" dans ce genre : (J'ai fait ça en 5 minutes je sais pas si ça va fonctionner hein :D

Code: (pawn) [Sélectionner]
strrep(string[], arep[], rep[])
{
new len = strlen(arep);
    if(!len) return 0;
    new pos;
    if(strfind(string, arep) == -1) return 0;
    do
        {
pos = strfind(string, arep);
strdel(string, pos, pos+len);
strins(string, rep, pos, len);
        }
while(strfind(string, arep) != -1);
return 1;
}

Je me permets de te donner le code déjà fait vu que t'as l'air déjà assez expérimenté pour le comprendre sans bêtement le copier-coller ^^

« Modifié: 13 Mai 2014, 22:05:40 par CarCrasher »

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Remplacer un caractère par un autre
« Réponse #2 le: 13 Mai 2014, 22:38:19 »
Salut, il y a quelques soucis dans ton code, l'utilisateur peut déclencher une boucle infini s'il fait un :

Code: (pawn) [Sélectionner]
strrep(string, "chaine", "chaine");
Je te propose donc d'utiliser l'argument 'pos' dans la fonction 'strpos'.

Ta fonction est pas très bien optimisé, elle utilise plusieurs fois la fonction strfind, alors qu'elle peut le faire une fois par itération de boucle.

Sinon, voici comment je verrai ta fonction :


Code: (pawn) [Sélectionner]
strrep(string[], arep[], rep[])
{
new len;
new pos;

len = strlen(arep);
pos = -1;

if(len)
{
while((pos = strfind(string, arep, pos + 1)) != -1)
{
strdel(string, pos, pos + len);
strins(string, rep, pos);
}
}
}



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne CarCrasher

  • *
  • Tueur en série
  • Messages: 144
    • Voir le profil
Re : Remplacer un caractère par un autre
« Réponse #3 le: 13 Mai 2014, 22:50:02 »
Vui enfin comme j'ai dit ça a été fait en 5 minutes sans vraiment réfléchir !
Mais bon, c'est à ça qu'internet sert, à partager les connaissances :D

Et d'ailleurs, merci de m'avoir montré qu'on puisse attribuer des valeurs aux variables lors d'une condition !  :kiss:


Hors ligne Romeo_Urbano

  • *
  • Tueur en série
  • Messages: 128
    • Voir le profil
Re : Remplacer un caractère par un autre
« Réponse #4 le: 14 Mai 2014, 19:43:47 »
Bonjour tout le monde,

Vraiment je suis content et je vous remercie infiniment pour votre aide! j'avais penser à la même chose, mais vu que je maîtrises pas trop les string, je savais pas comment le faire, mais après votre réponse j'ai tout d'abord compris le code, et j'ai maintenant acquis de nouvelles connaissances sur les str qui vont trop m'aider prochainement, et finalement j'ai testé le code il marche sans 0 bug donc je vous remercie une autre fois.

par contre ton code avait deux warning une fois on utilise le code, mais j'ai réparé, le code qui marche et sans aucun warning est le suivant:

Citer
strrep(string[], arep[], rep[])
{
        new len;
        new pos;

        len = strlen(arep);
        pos = -1;

        if(len)
        {
         while((pos = strfind(string, arep, true)) != -1)
           {
               strdel(string, pos, pos + len);
               strins(string, rep, pos,strlen(string));
         }
        }
}

Sujet Close.

Cordialement Marouane
« Modifié: 14 Mai 2014, 20:07:58 par Romeo_Urbano »