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 :

decouper tableau de char en 2 pars pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut decouper tableau de char en 2 pars pointeur
    bonjours tout le monde.
    je cherche la solution pour découper un tableau de caractères (une phrase) le plus efficacement possible.

    le but est de découper phrase[] en 2 et de les séparer dans struc[0].phrase[] et struc[1].phrase. pour l'instant je planche sur quelque chose dans ce style.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int longueur=(int)strlen(phrase);
     
    int m= longueur/2;
    while(phrase[m]!=' ')m++;
     
    phrase[m]='\0';
     
    *rc[0].phrase=*phrase;
    *rc[1].phrase=*(phrase+((m+1)*sizeof(char)));

    l'idée est plus ou moins la mais ça ne fonctionne pas trop
    un printf n'affiche que la première lettre de chaque string. j'ai pas trouver grand chose sur google a pars strtoke() mais j'ai pas trop compris la syntaxe.
    merci de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 29
    Par défaut
    Voici un petit exemple de code a implementer (se contente de couper en deux):
    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
    26
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    int main()
    {
            char mychar[] = "coucoux";
            int i = 0;
            int slen = (int)(strlen(mychar)/2); //taille de la moitiee de la chaine (ou la moitie-1)
     
            char *ptr = malloc(sizeof(char)*slen); //allocation de memoire
            char *ptr2 = malloc(sizeof(char)*(strlen(mychar)-slen)); //idem
     
            for(i = 0; i < slen; i++)
                    *(ptr+i)=mychar[i]; // on fait la copie de la premiere moitiee
     
            for(i = 0; i< strlen(mychar)-slen; i++)
                    *(ptr2+i)=mychar[slen+i]; // on fait la copie de la seconde moitiee
     
            printf("ptr : %s\n", ptr); printf("ptr2 : %s\n", ptr2); // on verifie
     
            free(ptr); free(ptr2); // on libere la memoire
     
            return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    me@Amd64:~$ gcc -o main main.c
    me@Amd64:~$ ./main
    ptr : cou
    ptr2 : coux

  3. #3
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    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
    /* Le cast est inutile */
    int longueur = strlen(phrase); 
    /* et si la longueur etais egale a zero ? */
    int m /*= longueur/2*/;
     
    /* on evite donc la division par zero */
    if( longueur-1 > 0 ) { 
    	/* a noter que phrase[longueur]=='\0' */
    	m = (longueur-1)/2;
    	/* et si la phrase ne contient pas d'espace ? */
    	while( m<longueur && phrase[m]!=' ')m++;
    	/* m ne devras etre incremente que si il est inferieur a longueur */	
    	if( m<longueur ) {
    		phrase[m]='\0';
    		m++;
    	}
    	/* Je suppose que rc.phrase est un tableau de pointeur sur char ? */
    	rc[0].phrase = phrase;
    	rc[1].phrase = phrase + m; 
    }
    Citation Envoyé par kosumo
    je cherche la solution pour découper un tableau de caractères (une phrase) le plus efficacement possible.
    Ce n'est malheureusement pas très efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char phrase[] = "Le nom exacte de la vitamine B est chlorure d'aminométhylpyrimidinylhydroxyéthylméthythiazolium";

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    merci the-death mais j'avais déjà cette solution mais elle n'est pas top niveau performances.

    excuser moi j'ai oublier les déclarations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct recherche recherche;
    struct recherche
       {
       char phrase[120];
       char mot[11];
       };
     
    	char phrase[200],mot[11];
    	recherche rc[2];
    phrase contient des mots de 10 char au max séparer pars des espaces (d'ailleurs je suis obliger de séparer sur un espace pour ne pas couper de mots).
    En fait j'envoie la structure a 2 threads qui calcule le nombres de fois que mot apparait dans phrase et renvoi la réponse. j'ai juste un souci pour trouver un découpage performant.

    merci quand même.
    Si quelqu'un a autre chose a proposer je suis preneur

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    bonjour tout le monde.
    pour ceux que ça intéressent j'ai trouver la solution.
    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
    typedef struct recherche recherche;
    struct recherche
       {
       char* phrase;
       char* mot;
       };
    .
    .
    .
    x=(int)strlen(phrase);
     
    	i=x/2;
    	while(i<(x/2-1) | phrase[i]!=' '){
    		i++;
    		}
     
    	phrase[i]='\0';	
    	rc[0].phrase=phrase;
    	rc[1].phrase=(phrase+((i+1)*sizeof(char)));

Discussions similaires

  1. Tri de tableau par pointeurs
    Par colocolo dans le forum Pascal
    Réponses: 9
    Dernier message: 19/02/2007, 21h02
  2. Tableau Bidimensionel Géré Par pointeurs
    Par boubyx.G dans le forum C++
    Réponses: 19
    Dernier message: 31/01/2007, 20h13
  3. trier par ordre alphabetique un tableau de char
    Par Pitou5464 dans le forum C
    Réponses: 3
    Dernier message: 02/11/2006, 18h44
  4. Réponses: 8
    Dernier message: 10/03/2006, 17h28

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