IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

remplacement d'une sous chaine par une autre sous chaine C++


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Points : 65
    Points
    65
    Par défaut remplacement d'une sous chaine par une autre sous chaine C++
    bonjour,
    Je veux faire un remplacement d'une sous chaine par une autre souschaine à plusieurs emplacements.
    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main(void)
    {
        string s = "abcerfg";
     
        s.replace(3, 2, "HHHHHHH");
        s.replace(5,1,"AAAAA");
     
        cout << s << endl;
        return 0;
    }
    ici je veux remplacer "er" par "HHHHHHH".
    et je veux remplacer "f" par "AAAAA"
    pour avoir un resultat "abHHHHHHHrAAAAAg"

    mais voici le resultat par le prog: "abcHHAAAAHHHHHfg"
    est-ce que vous avez une solution?
    merci

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Ben une fois que tu as effectué ton premier remplacement, les indices ont changé, et donc le 5 ne correspond plus à f, mais à un 'A' (parmi ceux que tu viens d'insérer)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Et les indices commencent à 0 pas à 1.

  4. #4
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Et les indices commencent à 0 pas à 1.
    Tout à fait, et son premier indice (3) correspond bien au 'e', et son second (5) correspond bien à la position initiale de 'f'. (ou il a édité son post depuis ta remarque?)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Points : 65
    Points
    65
    Par défaut
    est-ce qu'il y a une solution pour garder les indices?

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Oui!

    La solution la plus simple est de commencer par la correction qui est le plus loin dans la chaîne, comme ça les indices antérieurs ne sont pas faussés.

    La solution la plus robuste est de rechercher dans la chaîne l'endroit où commence la chaîne que tu veux remplacer et de faire ton replace ensuite. Il y a la fonction find pour cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <string>
     
    int main() {
     
      std::string s = "abcdefghij";
      s.replace(s.find("cde"), 3, "AHAHAHAH");
     
    }

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Le plus simple je sais pas, ça reste du bricolage. Simple sur un cas trivial comme ça, mais vite dépassé.
    Le mieux par contre serait de faire un chouilla d'algorithmique pour y parvenir. Rien de bien sorcier d'ailleurs.
    Un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    std::string Replace(std::string in, const std::string& toReplace, const std::string& replacement)
    {
      for( size_t i = 0, p = in.find(toReplace, i);
            p != std::string::npos;
            i = p + replacement.length(), p = in.find(toReplace, i)
          )
      {
        in.replace(p, toReplace.length(), replacement);
      }
      return in;
    }
    Le seul "trick" c'est de bien bouger le i pour ne pas finir en boucle infinie avec un appel comme Replace("toto", "to", "toto").
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Tout à fait, et son premier indice (3) correspond bien au 'e', et son second (5) correspond bien à la position initiale de 'f'. (ou il a édité son post depuis ta remarque?)
    ici je veux remplacer "er" par "HHHHHHH".
    et je veux remplacer "f" par "AAAAA"
    pour avoir un resultat "abHHHHHHHrAAAAAg"

    mais voici le resultat par le prog: "abcHHAAAAHHHHHfg"
    est-ce que vous avez une solution?
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        s.replace(3, 2, "HHHHHHH");
    Avec ce machin il n'aura jamais "abHHHHHHHrAAAAAg" car ça commencera toujours par "abc..."

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par stendhal666 Voir le message
    Oui!

    La solution la plus simple est de commencer par la correction qui est le plus loin dans la chaîne, comme ça les indices antérieurs ne sont pas faussés.

    La solution la plus robuste est de rechercher dans la chaîne l'endroit où commence la chaîne que tu veux remplacer et de faire ton replace ensuite. Il y a la fonction find pour cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <string>
     
    int main() {
     
      std::string s = "abcdefghij";
      s.replace(s.find("cde"), 3, "AHAHAHAH");
     
    }
    bon c'est dans le cas oü les séquences à modifier sont distinctes mais si j'ai des séqences ADN ça marche pas la fonction s.find("cde")!!.
    en plus moi j'ai plusieurs remplacements pas un seul donc le problème est un peu compliqué.

  10. #10
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Avec ce machin il n'aura jamais "abHHHHHHHrAAAAAg" car ça commencera toujours par "abc..."
    Ah effectivement, c'était donc là que se situait ta remarque, désolé.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    j'ai plusieurs remplacements pas un seul donc le problème est un peu compliqué.
    Donnes nous le vrai problème, là, tu obscurcie le truc.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Points : 65
    Points
    65
    Par défaut voici le problème généralement
    j'ai un alignement de deux séquences et voici le fichier de sortie.
    3 2881 ATTTAAGTGCCTGGGCCCCTTTGGAACCGTTTAAACCGTTGTGTGGTGTTGAAATTTTTT
    8547 10456 CTTGCTTAACCGTTGGCCCGGGGGGGGGAAACGTGTGTGTGTAAAACCCCCCCTGGGAAAAA
    4498 6926 GTGGGTTCCCAAAACGTTGGGCCACACACACACAGGGGGGGGGGTTTGGGGGGCCCCACCC
    6853 7847 ACGTTGGGCCACACACACACAGGGGGGGGGGTTTCTCGGGAAAAAAACCCCTTTTTTTTTTTTTTTTT
    3678 4567 ......
    2895 3684 ..........
    2314 3242 ........
    500 1503 ..........

    la première et la deuxième colonne c'est la position du début et de fin d'alignement dans la séquence SEQ.
    et la troisième colonne c'est la partie de l'alignement d'une séquence C avec SEQ.
    Je veux faire une modification à partir de la position debut jusqu'à la fin de la séquence SEQ en mettant la séquence de la troisième colonne.
    c'est à dire dans la position de 3 à 2881 je mettre "ATTTAAGTGCCTGGGCCCCTTTGGAACCGTTTAAACCGTTGTGTGGTGTTGAAATTTTTT". (par exemple)
    est-ce que vous avez une solution?
    Merci

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Vos intervalles ne sont pas ordonnées et se chevauchent, le résultat attendu est donc ambiguë.
    4498 6926 GTGGGTTCCCAAAACGTTGGGCCACACACACACAGGGGGGGGGGTTTGGGGGGCCCCACCC
    6853 7847 ACGTTGGGCCACACACACACAGGGGGGGGGGTTTCTCGGGAAAAAAACCCCTTTTTTTTTTTTTTTTT
    Ce 6853, c'est l'indice dans la séquence de base avant transformation ou après avoir appliqué les différentes modifications ?
    Je fais l'assertion que la taille de la séquence de remplacement n'est pas forcement de la même longueur que la séquence à remplacer.
    La chaine a donc une longueur variable, on n'est OK ?

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Vos intervalles ne sont pas ordonnées et se chevauchent, le résultat attendu est donc ambiguë.
    oui les intervalles ne sont pas ordonnées et se chevauchent.

    Ce 6853, c'est l'indice dans la séquence de base avant transformation ou après avoir appliqué les différentes modifications ?
    c'est l'indice dans la séquence de base sans transformation donc après la première transformation ces positions vont changer. Et si on essai une deuxième modification ils vont encore changer.

    Je fais l'assertion que la taille de la séquence de remplacement n'est pas forcement de la même longueur que la séquence à remplacer.
    La chaine a donc une longueur variable, on n'est OK ?
    oui exactement ils n'ont pas la même taille. la chaine est de longueur variable.
    c'est le problème généralement donc comment faire? j'ai réfléchit sur plusieurs approches mais ils ne marchent pas.
    Merci

  15. #15
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Que cela donne t-il avec un exemple simplifié ?

    abcdef

    0 2 x
    1 3 y
    xydef ?

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par jo_link_noir Voir le message
    Que cela donne t-il avec un exemple simplifié ?
    abcdef

    0 2 x
    1 3 y

    xydef ?
    ici, l'exemple est un peu complexe et pas simplifié.
    voici un exemple simplifier.
    la sequence SEQ: abcdefghijklmnopq
    1 3 AAAAA
    5 7 XXXXXXX
    6 7 XXXX --> inclut dans [5,7] donc on va pas le mettre.
    6 10 TTTTTT --> se chevauche avec [5,7] donc les positions changent en [8,10].

    SEQ devient: aAAAAdeXXXXXXXTTTmnopq.
    voila.

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Le plus naturel pour moi, créer une maps ordonnée de size_t pour la clé et int pour la valeur.
    La clé (size_t) contient l'indice du début d'un remplacement déjà effectué et la clé donnera le décalage qu'il faudra ajouter pour récupérer l'ancien offset à partie de la nouvelle chaine.
    Si la chaine de remplacement est plus longue que la chaine remplacée, la valeur sera positive de la différence de longueur entre le remplacé et le remplaçant, sinon elle sera négative.
    Si le remplacé a la même longueur pas la peine d'ajouter un élément dans la maps.
    Pour savoir de combien il faut faire dériver l'indice, il suffit d'ajouter toutes les valeurs dont la clé est inférieur à l'indice de départ du remplacement.

  18. #18
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par mido1951 Voir le message
    la sequence SEQ: abcdefghijklmnopq
    1 3 AAAAA
    5 7 XXXXXXX
    6 7 XXXX --> inclut dans [5,7] donc on va pas le mettre.
    6 10 TTTTTT --> se chevauche avec [5,7] donc les positions changent en [8,10].

    SEQ devient: aAAAAdeXXXXXXXTTTmnopq.
    voila.
    Sans même passer par une structure de données complexe, il me semble qu'en calculant un offset à chaque changement tu devrais être tranquille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    int sp_replace(const std::string& in, int pos, int off, int len, const std::string& subst) {
      int o = subst.length() - len;
      in.replace(pos + off, len, subst);
      return o;
    }
     
    int main() {
     
      std::string s = ... // SEQ 
      int offset = 0;
     
      while ( /* il reste des modifs à faire */) {
        int p, l;
        std::string subst;
        /* parse tes modifs pour remplir p, l, subst */
        offset += sp_replace(s, p, offset, l, subst);
      }
    }
    du coup ça donnerait:

    Citation Envoyé par mido1951 Voir le message
    la sequence SEQ: abcdefghijklmnopq
    1 3 AAAAA // offset = 2
    5 7 XXXXXXX // offset = 2
    6 7 XXXX --> inclut dans [5,7] donc on va pas le mettre. // optimisation à faire quand le programme marchera: premature optimization is the root of all evil!
    6 10 TTTTTT --> se chevauche avec [5,7] donc les positions changent en [8,10]. // 6 + offset = 8, on est bons

    SEQ devient: aAAAAdeXXXXXXXTTTmnopq. // en revanche je ne comprends pas pourquoi il ne reste que 3 des 6 T?
    voila.

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ah, je n'avais pas vu que c'était un multipost. L'autre thread est ici: problème idée de programmation
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par stendhal666 Voir le message
    Sans même passer par une structure de données complexe, il me semble qu'en calculant un offset à chaque changement tu devrais être tranquille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    int sp_replace(const std::string& in, int pos, int off, int len, const std::string& subst) {
      int o = subst.length() - len;
      in.replace(pos + off, len, subst);
      return o;
    }
     
    int main() {
     
      std::string s = ... // SEQ 
      int offset = 0;
     
      while ( /* il reste des modifs à faire */) {
        int p, l;
        std::string subst;
        /* parse tes modifs pour remplir p, l, subst */
        offset += sp_replace(s, p, offset, l, subst);
      }
    }
    du coup ça donnerait:
    Bon ta solution marche pour cet exemple mais quand on a :
    3 2881 ATTTAAGTGCCTGGGCCCCTTTGGAACCGTTTAAACCGTTGTGTGGTGTTGAAATTTTTT
    8547 10456 CTTGCTTAACCGTTGGCCCGGGGGGGGGAAACGTGTGTGTGTAAAACCCCCCCTGGGAAAAA
    4498 6926 GTGGGTTCCCAAAACGTTGGGCCACACACACACAGGGGGGGGGGTTTGGGGGGCCCCACCC
    6853 7847 ACGTTGGGCCACACACACACAGGGGGGGGGGTTTCTCGGGAAAAAAACCCCTTTTTTTTTTTTTTTTT
    3678 4567 ......
    2895 3684 ..........
    2314 3242 ........
    500 1503 ..........
    je pense pas que ça marche.
    en plus o = subst.length() - len retourne toujours une valeur négative puisque SEQ.len() >> Substr.len().
    6 10 TTTTTT --> se chevauche avec [5,7] donc les positions changent en [8,10]. // 6 + offset = 8, on est bons

    SEQ devient: aAAAAdeXXXXXXXTTTmnopq. // en revanche je ne comprends pas pourquoi il ne reste que 3 des 6 T?
    voila.
    car on pris à partir de l'intervalle [8,10] donc la chaine c=TTTTTT on va prendre que les trois derniers caractères.
    donc votre solution ne marche pas pour un exemple comme ça.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  2. Réponses: 3
    Dernier message: 05/01/2007, 15h50
  3. Remplacer une sous chaîne par une autre
    Par Erakis dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 10/11/2006, 09h16
  4. remplacement d'une chaine par une autre
    Par zalalus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/07/2006, 10h09
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo