Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : chaîne de caractères [ Divers / Débutant(e) ] (ProgVal)

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é 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...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.