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 :

Ajouter un caractere quelconque a une chaine ?


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut Ajouter un caractere quelconque a une chaine ?
    Bonjour tout le monde

    Je cherche un moyen d'ajouter un caractere quelconque a une chaine de caractere.

    Quelque chose dans ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String temp = L"premier bout de phrase dont le numero est ";
    temp.operator +=(*);     // ajouter un caractere quelconque, un entier
    temp.operator +=(L".");  // fin de la phrase
    Le compilateur ne veut pas m'ajouter l'etoile :s

    Quelqu'un aurait une idee SVP ?

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Tu va devoir utiliser la fonction rand(), qui te retourne un entier, et le caster en char, en prenant soin que le réultat de ton rand() reste compris entre les limites que tu souhaites (utliser l'opérateur %).

  3. #3
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Le but des opérateurs c'est d'être appelables avec une syntaxe simplifiée, c'est moche de les appeler comme ça

    Ensuite, * n'est pas un caractère... Par contre '*' en est un (ou alors "*" si l'opérateur += ne supporte que l'ajout de chaînes).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String temp = L"premier bout de phrase dont le numero est ";
    temp += L"*";
    temp += L".";

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    Citation Envoyé par r0d
    Tu va devoir utiliser la fonction rand(), qui te retourne un entier, et le caster en char, en prenant soin que le réultat de ton rand() reste compris entre les limites que tu souhaites (utliser l'opérateur %).
    Salut r0d

    Voici pourquoi je cherche a faire ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (fonction() == L"premier bout de phrase dont le numero est 1." || 
    fonction() == L"premier bout de phrase dont le numero est 2." || 
    fonction() == L"premier bout de phrase dont le numero est 3." || 
    fonction() == L"premier bout de phrase dont le numero est 4.")
    {
             ...
    }
    En fait, c'est pour essayer d'alleger le code, parce que la, c'est un peu moche :s

    Je voudrais donc pouvoir creer en une ligne une chaine de caractere qui ressemble a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String temp = L"premier bout de phrase dont le numero est " + * + ".";
    if (fonction() == temp)
    {
           ...
    }
    Je sais pas si je me fais clair :s

  5. #5
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    C'est pas si simple

    Ce que tu cherches à faire doit utiliser les expressions régulières. Tu peux en trouver dans la bibliothèque standard C, ou dans boost.regex.

    Mais dans ton cas pas besoin de sortir l'artillerie lourde. Il suffit de vérifier que le début de la chaîne correspond au motif fixé, et que le dernier caractère est soit '1', soit '2', soit '3' soit '4'.

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    Citation Envoyé par Laurent Gomila
    C'est pas si simple

    Ce que tu cherches à faire doit utiliser les expressions régulières. Tu peux en trouver dans la bibliothèque standard C, ou dans boost.regex.

    Mais dans ton cas pas besoin de sortir l'artillerie lourde. Il suffit de vérifier que le début de la chaîne correspond au motif fixé, et que le dernier caractère est soit '1', soit '2', soit '3' soit '4'.
    Coucou vous deux

    Voici ce que j'ai fait, c'est pas tip top, et finalement, ca me fait rien gagner en rapidite d execution :p mais je le met quand meme, 'manquerait plus que je me sois pris la tete pour rien

    Sachant que je recherche 5 types de phrases, la premiere etant "Super: tout fonctionne" et les 4 suivantes "Erreur: l'appareil 1 ne fonctionne pas." "Erreur: l'appareil 2 ne fonctionne pas." "Erreur: l'appareil 3 ne fonctionne pas." "Erreur: l'appareil 4 ne fonctionne pas.":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String premiereLettre; // de la chaine de carac retournee par fonction()
     
    premiereLettre.operator+=(fonction().GetAt(0)); // le GetAt retourne la lettre d'index 0
    if (premiereLettre== L"S" || premiereLettre== L"E")
    {
         ...
    }
    Ca fonctionne c'est fonctionnel car il ne peut y avoir une autre phrase commencant par S ou E.

    Merci pour les conseils

  7. #7
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    T'es quand même un as de la complication inutile

    1/ Pouquoi diable t'acharnes-tu à écrire les opérateurs sous cette forme ? Un opérateur += c'est fait pour s'écrire "a += b".

    2/ Tu veux tester le premier caractère, alors pourquoi construire une chaîne vide, lui concaténer ce caractère et finalement faire des comparaisons de chaînes à un seul caractère ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    wchar_t premiereLettre = fonction().GetAt(0);
     
    if (premiereLettre== L'S' || premiereLettre== L'E')
    {
         ...
    }

  8. #8
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Par défaut
    Citation Envoyé par Laurent Gomila
    T'es quand même un as de la complication inutile

    1/ Pouquoi diable t'acharnes-tu à écrire les opérateurs sous cette forme ? Un opérateur += c'est fait pour s'écrire "a += b".

    2/ Tu veux tester le premier caractère, alors pourquoi construire une chaîne vide, lui concaténer ce caractère et finalement faire des comparaisons de chaînes à un seul caractère ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    wchar_t premiereLettre = fonction().GetAt(0);
     
    if (premiereLettre== L'S' || premiereLettre== L'E')
    {
         ...
    }
    Effectivement, ca marche parfaitement, et de plus c'est beaucoup plus propre

    Merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2006, 12h40
  2. Regexp : impossible d'enlever un caractere de fin à une chaine
    Par dukesgf dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 18/08/2006, 16h19
  3. Réponses: 4
    Dernier message: 05/06/2006, 12h43
  4. Réponses: 3
    Dernier message: 24/04/2006, 15h53
  5. Réponses: 11
    Dernier message: 25/09/2005, 21h20

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