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 :

Manipuler chaine caractere


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut Manipuler chaine caractere
    Bonjour,
    J'aimerai modifier un caractere d'une variable AnsiString. Par exemple le caractere a la position 8 de ma variable "developpez.com" et mettre a la place de "p" mettre un "q".

    Si quelqu'un sais aussi par exemple j'ai une variable qui s'appelle "Nbr", j'aimerai initialiser et utiliser la variable "Nbr1", "Nbr2", "Nbr3", ... En utilisant une boucle for... Par exemple "Nbr[i]" : "i" serai ma variable d'incrementation +1 a chaque foie...

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'aimerai modifier un caractere d'une variable AnsiString. Par exemple le caractere a la position 8 de ma variable "developpez.com" et mettre a la place de "p" mettre un "q".
    Pour le reste j'ai pas très bien compris ta question.

  3. #3
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut Corrections
    Merci pour ta réponse, je vais essayer...

    J'aimerai initialiser plusieurs variable dont le nom est Nbr1, Nbr2, Nbr3, ...
    Je dois utiliser une boucle for et initialiser ces variables avec la boucle. Chaque foie que je fai la boucle il doit m'incrementer +1 a la variable "i" et a chaque foie il m'initialise une nouvelle variable (Nbr1, Nbr2, Nbr3, ...) par rapport au nombre de la variable "i". Par exemple si "i" = 3, il va m'initialiser la variable "Nbr3". Un truc du style int Nbr["i"] ??

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce que tu veux c'est un tableau de variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const int Taille = ...;
    AnsiString Nbr[Taille];
    for (int i = 0; i < Taille; ++i)
    {
        Nbr[i] = "...";
    }

  5. #5
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Oui, merci beaucoup!
    Pour t'as premiere réponse il me dit erreur impossible de convertir Ansistring en char??
    Enfait je lui dit que le caractere 5 il doit me le remplacer par une autre variable qui est aussi AnsiString! Je ne comprend pas pourquoi il me dit char??

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Parce que le caractère 5 est un... caractère. Normal qu'il y ait un problème pour lui affecter un AnsiString. Si tu veux insérer une chaîne à la position 5 il faut procéder autrement.

  7. #7
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Je doit faire une variable char ? J'ai essayer char test[1] = 'q' il me dit impossible de comvertir char * en char ... Comment faire??

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faudrait commencer par comprendre ce que tu fais, plutôt que d'y aller à tâtons en faisant n'importe quoi

    AnsiString est une classe de chaînes de caractères, et comme toute classe de chaînes elle donne accès aux caractères via l'opérateur []. Elle possède aussi des fonctions pour insérer des chaînes en début / fin / n'importe quelle position.

    Maintenant, j'ai répondu à ta question qui était de remplacer un caractère de la chaîne. Si tu veux faire autre chose (a priori à base de chaîne) explique précisément.

  9. #9
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Je suis entrain de faire un programme qui me test toutes les possibilités possible... Avec les nombres et caracteres de l'alphabet, ce qui me fais 36 caracteres au total. Pour lister toutes les possiblités je rentre le caractere en decimal et j'ai fai une fonction pour qu'il me le passe en ASCII. Alors j'ai fai une boucle for pour qu'il m'essaie toutes les possibilités. Si tu veux j'essaie toutes les possibilités du dernier caractere de ma variable AnsiString, quand il a essayer sur le dernier caractere il m'ajoute +1 en decimal au caractere qui se situe juste avant lui puit reconverti tout en ASCII et ainsi de suite pour essayer toutes les possibilités.

    Alors j'aimerai lui dire d'incrementer +1 au caractere de ma variable AnsiString... Pour pouvoir la reconvertir apres en ASCII. Je ne suis pas très douer pour expliquer, je sais t'as du le remarquer, je fais de mon mieux.

    Merci pour t'es réponses

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Déjà tu ne devrais pas compter sur le fait que tu vas pouvoir parcourir tous les caractères / chiffres simplement en incrémentant un code ASCII. Il existe des encodages pour lesquels la plage que tu parcours n'est pas contigüe.

    Je ferais plutôt 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
    // Définition des caractères à tester
    const char* caracteres = "abcdefghijklmnopqrstuvwxyz0123456789";
     
    AnsiString Str = ...;
    unsigned int N = ...;
     
    // On remplace le caractère numéro N de Str par tous les caractères à tester
    for (const char* c = caracteres; c != caracteres + sizeof(caracteres); ++c)
    {
        Str[N] = *c;
        ...
    }
    ... A moins bien sûr que j'ai mal compris ton problème.

  11. #11
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Merci beaucoup pour toutes t'es réponses, je suis débutant comme t'as du le remarquer. Mais sa m'affiche que 4 possibilités (a, b, c, d) je ne voie pas ou est l'erreur. Il y en a une?

    const char* caracteres = "abcdefghijklmnopqrstuvwxyz0123456789";

    AnsiString Str = "00000";
    unsigned int N = 5;

    // On remplace le caractère numéro N de Str par tous les caractères à tester
    for (const char* c = caracteres; c != caracteres + sizeof(caracteres); ++c)
    {
    Str[N] = *c;
    Memo1->Lines->Add(Str);
    }

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oups... sizeof(caracteres) renverra 4 car c'est un pointeur et non un tableau statique.

    Remplace la première ligne par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char[] caracteres = "abcdefghijklmnopqrstuvwxyz0123456789";

  13. #13
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Sa fonctionne toujours pas Je ne connais pas très bien pour pas dire rien du tout const char* ... Si j'ai bien compris tu m'as dit de mettre
    const char[] caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    AnsiString Str = "00000";
    unsigned int N = 5;

    // On remplace le caractère numéro N de Str par tous les caractères à tester
    for (const char* c = caracteres; c != caracteres + sizeof(caracteres); ++c)
    {
    Str[N] = *c;
    Memo1->Lines->Add(Str);
    }
    a la place de
    const char* caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    AnsiString Str = "00000";
    unsigned int N = 5;

    // On remplace le caractère numéro N de Str par tous les caractères à tester
    for (const char* c = caracteres; c != caracteres + sizeof(caracteres); ++c)
    {
    Str[N] = *c;
    Memo1->Lines->Add(Str);
    }
    Merci d'avance

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui c'est ça.

    Par contre ta chaîne ne fait que 5 caractères, et tu veux remplacer le caractère d'indice 5. Les indices démarrent à 0, ce qui signifie que le dernier caractère de ta chaîne sera le numéro 4 et non 5.

  15. #15
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    dsl mais il me dit déclaration terminée incorrectement!

  16. #16
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Sur quelle ligne ?

  17. #17
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Sur la premiere ligne ou tu ma dit de mettre des char[] a la place de char*

  18. #18
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu n'as pas oublié le ; ou la dernière " ?

  19. #19
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    J'ai exactement mit sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const char[] caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     
    AnsiString Str = "00000";
    unsigned int N = 5;
     
    // On remplace le caractère numéro N de Str par tous les caractères à tester
    for (const char* c = caracteres; c != caracteres + sizeof(caracteres); ++c)
    {
    Str[N] = *c;
    Memo1->Lines->Add(Str);
    }

  20. #20
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Enfaite j'arrive a faire toutes les possibilités pour un caractere mais si je veux le faire pour 10 caractere j'ai pas trouver dautre solution que de mettre la boucle for dans une autre boucle for :
    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
     
    const char[] caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     
    AnsiString Str = "00000";
    unsigned int N = 5;
    for (const char* c = caracteres; c != caracteres + 36; ++c)
    {
      for (const char* c = caracteres; c != caracteres + 36; ++c)
      {
        N = 5;
        Str[N] = *c;
        Memo1->Lines->Add(Str);
      }
      N = 4;
      Str[N] = *c;
      Memo1->Lines->Add(Str);
    }
    Je trouve pas d'autre maniere de faire... Mais si j'ai 10 caracteres, tu vois le nombre de boucles! Le code serais long et imcprehensible... En plus j'aimerai pouvoir choisir le nombre de caracteres a trouver toutes les possibilités se qui serai impossible de faire en mettant une boucle dans une autre boucle et insi de suite... Si tu voi une meilleur façon de faire, merci de me la dire...

Discussions similaires

  1. manipulation chaine caracteres
    Par hamma2 dans le forum C#
    Réponses: 3
    Dernier message: 11/04/2010, 12h28
  2. manipulation chaine de caractere
    Par speedy_souris dans le forum Débuter
    Réponses: 7
    Dernier message: 27/11/2009, 15h35
  3. manipulation chaine de caractere
    Par Alex35 dans le forum ASP
    Réponses: 9
    Dernier message: 08/02/2007, 14h11
  4. Manipulation chaîne de caractères
    Par jmde dans le forum Access
    Réponses: 7
    Dernier message: 07/12/2006, 09h37
  5. debutant asp manipulation chaine de caractere
    Par MaxiMax dans le forum ASP
    Réponses: 3
    Dernier message: 12/08/2005, 15h59

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