Convertir chaine
Résolu/Fermé
tina
-
22 oct. 2007 à 22:21
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 23 oct. 2007 à 20:48
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 23 oct. 2007 à 20:48
A voir également:
- Convertir chaine
- Convertir youtube en mp3 tuto - Guide
- Convertir une note sur 20 ✓ - Forum Bureautique
- Convertir pdf en word excel gratuit - Guide
- Ma tv ne trouve aucune chaine - Guide
- Excel extraire chaine de caractère après un caractère ✓ - Forum Excel
3 réponses
mamiemando
Messages postés
32283
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 mars 2023
7 572
23 oct. 2007 à 09:55
23 oct. 2007 à 09:55
Désolée je n'ai pas compris comment tu faisais ta conversion. Donne-nous aussi un exemple concret, peut-être que ce sera plus clair.
Bonne chance
Bonne chance
Bonjour,
moi j'ai un tableau qui contient de chaine caractére par exemple :
seq1 seq2
phe UUU
lit UAU
smq UUA
nne LUA
Aprés la generartion de la sequence aléatoire sachant quel aura comme taille minimum 1 et taille max 50 je dois la convertir en selon le tableau de sequence verifier si cette sequence génerer contient la se1 et je la covertit à la seq2 selon se repete tout au long de la taille de la sequence genérer ensuite je concaténe la conversion realisé.
donc moi selon ma resolution je dois donner une position de depart pour traiter la sequence generer =0 et en arrivant à la position 2 je verifie s'il existe dans la seq1 si oui je la convertit en seq2 et position devienne position +3 et je continuit jusqu'à la fin de la sequence ensuite je concaténe les resultats trouvées.
moi j'ai un tableau qui contient de chaine caractére par exemple :
seq1 seq2
phe UUU
lit UAU
smq UUA
nne LUA
Aprés la generartion de la sequence aléatoire sachant quel aura comme taille minimum 1 et taille max 50 je dois la convertir en selon le tableau de sequence verifier si cette sequence génerer contient la se1 et je la covertit à la seq2 selon se repete tout au long de la taille de la sequence genérer ensuite je concaténe la conversion realisé.
donc moi selon ma resolution je dois donner une position de depart pour traiter la sequence generer =0 et en arrivant à la position 2 je verifie s'il existe dans la seq1 si oui je la convertit en seq2 et position devienne position +3 et je continuit jusqu'à la fin de la sequence ensuite je concaténe les resultats trouvées.
mamiemando
Messages postés
32283
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 mars 2023
7 572
23 oct. 2007 à 20:48
23 oct. 2007 à 20:48
Ok alors je résume
- tu as une séquence seq1 d'entrée
- tu as une map qui associe pour un motif de seq1, un motif pour seq2
Tu parcours seq1 et à chaque fois que tu trouves un motif référencé dans ta map, tu ajoutes le motif correspondant à la fin de seq2.
Voici le pseudo code que je te propose :
Vu que je ne sais pas coder en java voici la version C++ (en espérant que ça t'aide).
Ce qui donne à l'exécution :
Note que l'ordre du parcours de la map est important. Ici les clé sont automatiquement triées dans l'ordre alphabétique donc si par exemple "plop" et "plo" ont tout deux un motif2 associé, il faut d'abord vérifier si la chaîne que tu traites commences par "plop" (et remplacer par le motif associé à plop), sinon utiliser le motif associé à "plo". C'est pour cela que je parcours la map en partant de la fin (reverse iterator).
Est ce que le programme fait bien ce que tu voulais ?
Bonne chance
- tu as une séquence seq1 d'entrée
- tu as une map qui associe pour un motif de seq1, un motif pour seq2
Tu parcours seq1 et à chaque fois que tu trouves un motif référencé dans ta map, tu ajoutes le motif correspondant à la fin de seq2.
Voici le pseudo code que je te propose :
construire seq1
construire une map qui associe à chaque motif (pour seq1) un motif correspondant (seq2)
i=0
tant que i < longueur(seq1)
motif_trouve = faux
extraire dans substr la sous chaine de seq1 qui débute à l'index i
pour chaque clé de la map
si substr commence par la clé (ie motif1)
ajouter dans seq2 le motif de remplacement motif2
incrémenter i de longueur(motif2)
motif_trouve = vrai
break
fin si
fin pour
si motif_trouve == faux, incrémenter i de 1
fin tant que
Vu que je ne sais pas coder en java voici la version C++ (en espérant que ça t'aide).
#include <string>
#include <map>
#include <iostream>
const std::map<std::string,std::string>
prepare_map_motif1_motif2(){
std::map<std::string,std::string> map_motif1_motif2;
map_motif1_motif2["phe"] = "UUU";
map_motif1_motif2["lit"] = "UAU";
map_motif1_motif2["smq"] = "UUA";
map_motif1_motif2["nne"] = "LUA";
return map_motif1_motif2;
}
int main(){
const std::map<std::string,std::string> map_motif1_motif2(prepare_map_motif1_motif2());
const std::string seq1("pheblalbalbalitblablasmqblablanne");
std::string seq2;
for(unsigned i=0;i<seq1.length();){
bool motif_trouve = false;
std::string substr = std::string(seq1,i);
std::map<std::string,std::string>::const_reverse_iterator
map_motif1_motif2_it (map_motif1_motif2.rbegin()),
map_motif1_motif2_end(map_motif1_motif2.rend());
for(;map_motif1_motif2_it!=map_motif1_motif2_end;++map_motif1_motif2_it){
const std::string & motif1 = map_motif1_motif2_it->first;
if (substr.find(motif1) == 0){
std::cout << "motif [" << motif1 << "] trouvé à la position " << i << std::endl;
const std::string & motif2 = map_motif1_motif2_it->second;
seq2 += motif2;
i += motif1.length();
motif_trouve = true;
break;
}
}
if (!motif_trouve) ++i;
}
std::cout << "seq2 = " << seq2 << std::endl;
return 0;
}
Ce qui donne à l'exécution :
motif [phe] trouvé à la position 0 motif [lit] trouvé à la position 12 motif [smq] trouvé à la position 21 motif [nne] trouvé à la position 30 seq2 = UUUUAUUUALUA
Note que l'ordre du parcours de la map est important. Ici les clé sont automatiquement triées dans l'ordre alphabétique donc si par exemple "plop" et "plo" ont tout deux un motif2 associé, il faut d'abord vérifier si la chaîne que tu traites commences par "plop" (et remplacer par le motif associé à plop), sinon utiliser le motif associé à "plo". C'est pour cela que je parcours la map en partant de la fin (reverse iterator).
Est ce que le programme fait bien ce que tu voulais ?
Bonne chance