Chaîne de caractère en c

Fermé
rahm 90 Messages postés 17 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 20 mai 2011 - 10 mai 2011 à 22:14
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 11 mai 2011 à 06:59
Bonjour,



je veut pour cette chaîne par exemple( if a >b),m'affiche sur l'écran chaque élément seul c'est à dire
if
a
>
b
sans pris en compte l'espace.
A voir également:

3 réponses

Profil bloqué
10 mai 2011 à 22:22
En C?

Tu fais un tant que (tu trouves un espace)
tu te sers de strchr avec un pointeur, lui indiquant le séparateur (ici " ", ton espace) pour récupérer ton bout de chaîne.
tu marques ton bout de chaine.
fin tant que

En gros c'est l'idée..
1
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
10 mai 2011 à 22:22
Salut,

La réponse est simple :

Apprends à programmer !!!

Il y a pas mal de cours sur Internet sur le C. Il te suffis d'en suivre un, et d'apprendre. Il y a aussi de très bons livres.

Et tant qu'on y est, soit plus poli (merci d'avance, cordialement, s'il vous plait, ... et pas de "je veux").

Indice : Fais une boucle.
0
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 11/05/2011 à 07:01
Bonjour,
Comme vous prenez en compte le "if" il vous faut créer une sorte de dictionnaire des mots que vous voulez extraire.
Un petit exemple j'ai commenté chaque ligne vous ne devriez pas avoir de problème pour le refaire à vôtre sauce :
#include <stdio.h> /* printf */  
#include <ctype.h> /* isalpha */  
#include <string.h> /* strlen strncmp */  

int main(void)  
{  
    /* i et j pour les boucles  
     * stx_nb nombre de mot dans le dico  
     * a_nb nombre de caracteres dans le buffer à parser */  
    int i=0,j,stx_nb=3,a_nb;  
    /* stx le dico */  
    char *stx[8]={"if","else","return"};  
    /* a le buffer à parser avec des tab espace et saut de ligne et mots du dico */  
    char *a="\tif( a > b ){ return 0; }\n\telse return 1;";  
    /* ptr un pointeur de char */  
    char *ptr;  
    /* a_nb recupere la longueur de a */  
    a_nb=strlen(a);  
    /* affiche a */  
    printf("chaine :\n%s\n------------\n",a);  

    /* une boucle sur chaque char du buffer a */  
    while(i<a_nb){  
        /* ignore les espace, tab et saut de ligne */  
        if(a[i]!=' '&&a[i]!='\t'&&a[i]!='\n'){  
            /* si le caractere actuel est alphabétique */  
            if(isalpha(a[i])){  
                /* alors on pointe sur ce caractere comme etant  
                 * le debut d'une nouvelle chaine : ptr */  
                ptr=&a[i];  
                /* une boucle sur le nombre de mot du dico */  
                for(j=0;j<stx_nb;j++){  
                    /* comparaison entre mots du dico et emplacement actuel  
                     * utilisant le pointeur et la longueur du mot du dico testé */  
                    if(!strncmp(ptr,stx[j],strlen(stx[j]))){  
                        /* si concordance affichage du mot */  
                        printf("%s\n",stx[j]);  
                        /* et donc un décalage de i à la longueur du mot trouvé */  
                        i+=strlen(stx[j])-1;  
                        /* on casse cette boucle car un mot est trouvé pas besoin  
                         * de la continuer */  
                        break;  
                    }  
                }  
                /* si j atteind stx_nb c'est qu'aucun mot du dico n'a été trouvé  
                 * alors on affiche le caractère alphabétique qui ne fait pas  
                 * partie du dico */  
                if(j==stx_nb) printf("%c\n",a[i]);  
            }  
            /* si le caractère n'est pas alphabétique alors on l'affiche  
             * (faudrait continuer pour extraire les nombre etc ici)*/  
            else{  
                printf("%c\n",a[i]);  
            }  
        }  
        /* incremente i */  
        i++;  
    }  

    return 0;  
}  

Aperçu de la sortie :
 
chaine : 
        if( a > b ){ return 0; } 
        else return 1; 
------------ 
if 
( 
a 
> 
b 
) 
{ 
return 
0 
; 
} 
else 
return 
1 
; 
0