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 :

string et cstring et les remplacement des caractéres


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 15
    Points : 0
    Points
    0
    Par défaut string et cstring et les remplacement des caractéres
    salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include<string>
    #include<algorithm>
    #include<cstring>
    int main(){
    using std::string;
       using std::cout;
       using std::endl;
       using std::replace;
     
    string s="a-zA-Z";
    string s2="\xC0-\xDF";//les caracteres accentuée
    string line="hi how are youéà&)àç__ç)"
    d'abord est ce que cette structure est correcte (string s="a-zA-Z" et string s2="\xC0-\xDF") je veux affecter un intervalle a un string si cette structure et incorrecte svp donner moi le correcte solution?;
    et j'ai besoin d'une fonction qui remplace dans line tous les caracteres de s par '0'?
    je sais q'il ya une fonction comme ca
    replace(line.begin(),line.end(),'d','0'); ca remmplace tous les d par 0;mais comment faire si on veux remplacer tous les caracteres de s par 0???
    et merrrrci

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    std::regex semble plus appropriée dans ce cas.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 15
    Points : 0
    Points
    0
    Par défaut
    merci .je ne veux pas utiliser regex par ce que j'ai trouver beaucoup de problèmes avec cette solution.

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    sans regex, une boucle peut éventuellement faire l'affaire.

    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
    #include <iostream>
    #include <string>
    #include <algorithm>
     
    int main() {
     
    	std::string d = "abcdef...ABCD...."; // la flemme mais faut écrire toutes les lettres ^^
    	std::string line="hi how are youéà&)àç__ç)";
     
    	for(char c: d) {
    		std::replace(line.begin(), line.end(), c, '\0');
    	}
     
    	std::cout << line << std::endl;
     
    	return 0;
    }

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 15
    Points : 0
    Points
    0
    Par défaut
    merci beaucoup mr ,comment affecter les caractéres accentuée a un string soit les majuscules ou les minuscules?si j’utilise la valeur hexadécimale des caractères accentuée comment affecter les a une string et merci beaucoup beaucoup.
    par exmple j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string s="abcdefghijklmnopqrstuvwxyz";
    string line="hello world560@\`";
    je veux remplacer tous les caractere qui n'appartient pas a s dans line avec 0;
    est ce que je fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(char c: !s) {
    	   std::replace(line.begin(), line.end(), c, '0');
     
                }
    je pense ca na marche pas comme ca comment faire ca svp?

  6. #6
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Tu peux faire un truc comme ça
    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
    20
    21
    22
    23
    24
    25
     
    #include <iostream>
    #include <string>
    #include <algorithm>
     
    int main() {
     
    	std::string d = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPKRSTUVWXYZ";
    	std::string line="hi how are youéà&)àç__ç)";
     
    	auto it = line.begin();
     
    	while(it != line.end()) { // pour tous le caracteres de line
    		if(d.find(*it) == std::string::npos) { // si le caractere n'est pas dans d
    			it = line.erase(it); // on le vire
    		}
    		else if(it != line.end()) { // sinon on passe au caractere suivant
    			++it;
    		}
    	}
     
    	std::cout << line << std::endl;
     
    	return 0;
    }
    Par contre je commence à avoir honte d'écrire ce genre de truc en sachant que les regex font partis de la std

    edit: et le temps d'exec doit être assez degueulasse aussi, un string ça doit être un vector<char> non trié (en gros) donc les recherches / suppressions c'est long

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 15
    Points : 0
    Points
    0
    Par défaut
    Est ce qui il ya une solution avec CString svp??????

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Déjà, je n'ai pas vraiment compris ce que tu cherches à faire. Peux-tu donner un exemple avec les chaîne de départ, et cette l'arrivée ?

    Ensuite, il faut savoir que la notion d'accentué ou pas n'existe pas en C++, et que en plus, si tu commence à t'aventurer sur ce sujet, il y a des chances que les std::string soient insuffisantes, puisqu'elle ne permettent pas de gérer tous les caractères de toutes les langues, à moins de supposer qu'elles soient encodées en UTF-8 (mais dans ce cas là, un caractères peut être encodé sur plusieurs chars).

    De même, selon les encodings utilisé, il n'y a aucune change que les caractères accentués soient dans un intervalle continu de valeurs.

    Dernier (?) point, pour trouver des caractères appartenant à un sous ensemble, des fonctions type find_first_of, find_first_not_of peuvent simplifier l'écriture.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Un p'tit code générique qui peut aider:
    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
    20
    21
    22
    23
    24
    template<typename C, typename Tr, typename Al>
    inline void find_and_replace(std::basic_string<C, Tr, Al> & s,
    	C const *os, typename std::basic_string<C, Tr, Al>::size_type oslen,
    	C const *ns, typename std::basic_string<C, Tr, Al>::size_type nslen)
    {
    	if (os==0 || oslen==0)
    		return;
    	for (typename std::basic_string<C, Tr, Al>::size_type pos=0;
    			(pos=s.find(os, pos, oslen))!=s.npos;
    			pos+=nslen)
    		s.replace(pos, oslen, ns, nslen);
    }
     
     
    template<typename C, typename Tr, typename Al>
    inline void find_and_replace(std::basic_string<C, Tr, Al> & s,
    	C oc,
    	C nc)
    {
    	for (typename std::basic_string<C, Tr, Al>::size_type pos=0;
    			(pos=s.find(oc, pos))!=s.npos;
    			++pos)
    		s.replace(pos, 1, 1, nc);
    }
    Mais comme le dit JolyLoic, il n'y a rien en standard permettant de faire du traitement un peu évolué de chaines de caractères dans un contexte linguistique.

    Par exemple, je cherche un outil permettant des découper du texte en phrases, des phrases en mots, d'identifier ces mots (pronom, nom, article, adjectif, verbe, adverbe, etc), d'identifier leur nombre et genre éventuels (maxima-> maximum, fille-> garçon), d'en extraire la forme normale (chevaux-> cheval, verbe conjugué-> infinitif, etc), et d'en lever les éventuel ambigüités en fonction du contexte (je "suis" beau-> être, je "suis" la foule-> suivre, etc).
    Dans un premier temps je me contenterais de trouver cela pour les langues utilisant l'alphabet latin.
    Si quelqu'un sait où trouver ça...Merci
    Bon, je vais pas faire mon difficile, en français et anglais pour commencer ça me va

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ca sent à plein nez l'analyse lexical et sémantique.

    Quelques mots clés utiles: ontologie, thésaurus, lexique, linguistique.
    Et une mention spéciale pour wordnet
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Bien senti

    Et je ne connaissais pas wordnet. Cependant ça n'analyse que les mots, pas les phrases ou paragraphes en entier.
    Je cherche plutôt quelque chose comme sygfran: des livres complets peuvent être analysés ("le petit prince" est proposé en exemple).

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 15
    Points : 0
    Points
    0
    Par défaut
    MERCI TOUS QUI ME REPONDE A MES QUESTIONS/
    j'ai utilisé une solution simple(string) et vos reponse aide moi pour completer la solution:merciii

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacer des caractères avec la fonction string.replace
    Par chtom dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/12/2008, 16h43
  2. [RegEx] Remplacer des caractères dans une string
    Par jexl dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 22h26
  3. Remplacer des caractères
    Par James.T dans le forum C++
    Réponses: 3
    Dernier message: 11/02/2006, 18h56
  4. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  5. Fonction permettant de remplacer des caractères
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 06/09/2004, 15h48

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