begin process at 2012 02 12 10:42:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

chaîne de caractères


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

chaîne de caractères

samedi 17 juin 2006 à 16:32:38 | chaîne de caractères

ProgVal

Bojour,

Comment faît-on pour "découper" une chaîne de cerartères? Par exemple 1 caractère sur 2.
Merci d'avance

ShowMessage ("signé ProgVal")
samedi 17 juin 2006 à 16:40:18 | Re : chaîne de caractères

niketou

http://www.cppfrance.com/infomsg_DECOUPER-CHAINE-CARACTERE_578493.aspx

strtok()

Decouper une chaine de caractere en 2 par : mezaya le 13/10/2005 20:50:43 :

une chaine de caractères est rien d'autre qu'un tableau de caratère.

int j=0,jj=0;
while( ACL[i].unDroit[j] != ':' ) j++;   // ici je me dans la chaine jusqu'au caractère ':'
j++; // j'avance d'un caractère pour ne pas copier le caratère ':'
while( ACL[i].unDroit[j+jj] !='\0' )
{
    recup_acl[jj] = ACL[i].unDroit[j+jj];  // je copie le reste de la chaine dans recup_acl
    j++;
}
recup_acl[jj] = '\0'; // je termine pas le caratère fin de chaine pour avoir une chaine valide.

si tu veut copier les 2 variables tu peut modifier le code comme ceci :

int j=0,jj=0;

while( ACL[i].unDroit[j] != ':' )
{
    recup_acl_gauche[j] = ACL[i].unDroit[j];   // copie la 1er variable dans recup_acl_gauche
    j++;
}
recup_acl_gauche[jj] = '\0';  // fin de chaine

j++;       // je ne copie pas le ':'

while( ACL[i].unDroit[j+jj] !='\0' )
{
    recup_acl_droite[jj] = ACL[i].unDroit[j+jj];  // copie
    j++;
}
recup_acl_droite[jj] = '\0'; // fin de chaine

Au final recup_acl_gauche = var1 et recup_acl_droite = var2

samedi 17 juin 2006 à 17:23:02 | Re : chaîne de caractères

SAKingdom

Membre Club
Tu peux toujours essayer cette fonction:

void strcut (char *source, char *destination, int start, int len)
{
    int pos = 0;
    char c = !NULL;

    if((start < 0) || (len < 0))
        goto fEND;

    while((pos < len) || (c == 0))
    {
        c = source[pos+start];
        destination[pos] = c;

        pos++;
    }

fEND:
    destination[pos] = 0;
}

source sera découpé à partir de start jusqu'à start+len. Le morceau découpé sera inseré dans destination.

___________________________________________
Les plus grands esprits trouvent toujours une solution

samedi 17 juin 2006 à 18:50:38 | Re : chaîne de caractères

SAKingdom

Membre Club
Ou encore celle-ci. Elle est optimisé mais moin sécuritaire.

void strcut (char *source, char *destination, int start, int len)
{
    int pos = len;
    char c = !NULL;

    if((start < 0) || (len < 0))
        goto fEND;

    while(len >= 0)
    {
        destination[len] = source[len+start];
        len--;
    }

fEND:
    destination[pos] = 0;
}

il faut être sûr que len+start ne soit pas plus gros que le total de mémoire alloué à la variable car sinon, la fonction pourrais déborder et écrire ou il ne faut pas. Même si len+start reste dans la mémoire alloué, il faut faire très attention à len car un taille exausive pourrais ralentire la vitesse d'execution. Il existe peut-être un autre moyen de rendre cette fonction plus rapide et sécuritaire mais je ne la connais pas encore. Si BruNews passait par ici, ce serait aimable de sa par de corriger cette fonction.

___________________________________________
Les plus grands esprits trouvent toujours une solution

samedi 17 juin 2006 à 19:12:01 | Re : chaîne de caractères

SAKingdom

Membre Club
void strcut (char *source, char *destination, int start, int len)
{
    char c = !NULL;
    int pos = len;

    if((start < 0) || (len < 0))
    {
        pos = 0;
        goto fEND;
    }

    while(len >= 0)
    {
        destination[len] = source[len+start];
        len--;
    }

fEND:
    destination[pos] = 0;
}

Celle-ci plutot. L'autre aura certain problèmes si tu donne un chiffres négatif à len.

___________________________________________
Les plus grands esprits trouvent toujours une solution

samedi 17 juin 2006 à 20:29:14 | Re : chaîne de caractères

vecchio56

Administrateur CodeS-SourceS
char c = !NULL;
??
Et ton goto fEND; n'est vraiment pas nécessaire, tu peux quand même le faire plus proprement:
  if((start < 0) || (len < 0))
  {
      destination[0] = 0;
  }
  else
  {
    int pos = len;
    while(len >= 0)
    {
      destination[len] = source[len+start];
      len--;
    }
    destination[pos] = 0;
  }
samedi 17 juin 2006 à 20:37:21 | Re : chaîne de caractères

SAKingdom

Membre Club
!NULL = non-nulle donc 1. C'est un façon explicite de l'écrire.

Pour goto fEND, je m'en suis rendu compte après mais vue que ce n'étais pas si grave, j'ai laissé passer.

___________________________________________
Les plus grands esprits trouvent toujours une solution

samedi 17 juin 2006 à 20:42:10 | Re : chaîne de caractères

SAKingdom

Membre Club
Ouais je vois ce que tu veut dire par char " c = !NULL; ?? "

C'est qu'il étais nécessaire dans la première fonction que j'ai montré. J'ai simplement oublié de le retirer.

___________________________________________
Les plus grands esprits trouvent toujours une solution

samedi 17 juin 2006 à 20:52:09 | Re : chaîne de caractères

SAKingdom

Membre Club
Faut me pardonner, j'ai pas toute ma tête aujourd'hui. Je me suis levé très tôt, j'ai mal au coup et à la tête et il fait chaud. Bon je reformule ma fonction avec l'aide de vecchio:

void strcut (char *source, char *destination, int start, int len)
{
    if((start < 0) || (len < 0))
   {
        destination[0] = 0;
   }
   else
   {
        int pos = len;
        while(len >= 0)
        {
            destination[len] = source[len+start];
            len--;
         }
         destination[pos] = 0;
    }
}

___________________________________________
Les plus grands esprits trouvent toujours une solution

samedi 17 juin 2006 à 21:52:11 | Re : chaîne de caractères

vecchio56

Administrateur CodeS-SourceS
Bon c'est sur, c ne sert pas
Mais malgré tout, je trouve ca étrange d'écrire !NULL, les gens normaux mettent plutot 1 :)

1 2

Cette discussion est classée dans : caractères, chaîne


Répondre à ce message

Sujets en rapport avec ce message

Pb Chaîne de caractères [ par mmuller57 ] Bonjour,J'ai créé un petit programme qui convertit les caractères d'une chaîne de caractères par leurs codes ASCII :#include #include #include int con Affichage d'une chaîne de caractères [ par kalf2000 ] bonjour,j'ai un petit souci, je réussit à récupérer à partir d'un fichier texte une chaîne de caractère et à la mettre dans un tableau de caractère (c Conversion d'un DWORD en chaîne de caractères [ par annplop ] Bonjour,je code en c++ (avec visual c++ 6), et j'ai besoin de convertir une variable de type DWORD en chaîne de caractères.Est-ce possible et si oui c découper une chaîne da caractères à partir d'un caratère point"." [ par oudkaramla ] salut tout le monde,j'ai un problème:si j'ai une chaîne de caractère(nom du fichier par exemple) dont je ne sais pas la longeur, comment je fais pour lire des caractères dans une chaîne [ par phenX ] voila mon problème: j'ai une chaîne de caractère (qu'on nommera ChCar) saisi par l'utilisateur, je voudrais pouvoir connaitre les quatres derniers car concatenation d'une chaîne de caractères [ par davdav73 ] Alors je c=programme sous builder 6 C++ et je voudrais savoir comment ajouter des chiffres entiers les uns après les autres. J'ai un pavé numérique et Conversion de int en chaîne de caractères [ par fahim ] Salut tout le monde,Je veux convertir des entiers en chaîne de caractères et je ne trouve pas comment.Est-ce-que quelq'un peut m'aider.Merci. comment retrouver l'adresse d'une chaîne de caractères dans un tableau de chaînes de caractères [ par telecomakram ] Bonjour,Comment je peux de retrouver l'adresse d'une chaîne de caractères dans un tableau de chaînes de caractères Son prototype sera: <font face conversion d'une chaîne de caractères en hexa [ par AnneG35 ] Bonjour,Je développe un module à intégrer à un serveur, en C++ sous Visual Studio. Les échanges client-serveur sont des requêtes binaires. Pour constr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,738 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales