chaines de caractere... si simple !

chaines de caractere... si simple ! - C - Programmation

Marsh Posté le 11-08-2008 à 23:49:49    

bonjour,
 
 
j'aurais aimé un petit coup de main...  
je dois joué sur les chaines de caractère en C... donc c'est pas gagné du tout!
 
je m'explique,j'ai code que voici  :
 
----------
 
     for(k = 0 ; k < 16 ; k++, j++)
     {
         if(data[j] < 127 && data[j] > 31)
            {
   
  //ici-lieu du code
   
----------
 
//ici-lieu du code, j'aurais aimé faire ca:
chaine=data[0]+data[2]+data[3];
printf(chaine);
 
j'ai essayé ca :
 
                fprintf(stdout, "%c", data[0]); //affiche le M
                fprintf(stdout, "%c", data[1]); //affiche le S
                fprintf(stdout, "%c", data[2]); //affiche le G
 
ceci m'affiche bien ce que je souhaite,  mais j'ai besoin de comparé ces chaines donc je bloques..
il me faudrait tout ça dans une variable pour faire des tests (contrairement à maintenant ou je fais qu'afficher un résultat).
 
C'est tout con, mais m***** !
 
Merci d'avance.
 
Newguy

Reply

Marsh Posté le 11-08-2008 à 23:49:49   

Reply

Marsh Posté le 12-08-2008 à 00:02:40    

une chaine de caractére, ca s'alloue avant de faire joujou : malloc et free
comparaison : strcmp
copie : strcpy

Reply

Marsh Posté le 12-08-2008 à 10:04:42    

Dans son cas précis (3 caracteres a comparer avec trois autres), malloc/free semble un poil le fusil a éléphant pour chasser la grenouille. Un buffer de 4 caracteres semble suffisant.
Bon, apres, il faut plus de details sur l'algorithmique de son code pour juger de la strategie la plus efficace.  
A+,
 
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-08-2008 à 10:36:23    

gilou a écrit :

Dans son cas précis (3 caracteres a comparer avec trois autres), malloc/free semble un poil le fusil a éléphant pour chasser la grenouille. Un buffer de 4 caracteres semble suffisant.
Bon, apres, il faut plus de details sur l'algorithmique de son code pour juger de la strategie la plus efficace.  
A+,


 
Certes pour malloc, reste qu'il faudrait plsu de détails :€

Reply

Marsh Posté le 12-08-2008 à 10:49:38    

Merci de réponses,
 
mais comment je peux faire ça :
//ici-lieu du code, j'aurais aimé faire ca:
chaine=data[0]+data[2]+data[3];
printf(chaine);

Reply

Marsh Posté le 12-08-2008 à 12:13:07    

Code :
  1. char chaine[4];
  2. strncpy(chaine,data,3);
  3. chaine[3] = '\0';


 
En gros et de tête

Reply

Marsh Posté le 12-08-2008 à 12:30:33    

Tu veux chaine=data[0]+data[2]+data[3];  
TU fais
chaine[0] = data[0];
chaine[1] = data[2];
chaine[2] = data[3];
chaine[3] = 0;


Message édité par Trap D le 12-08-2008 à 12:30:54
Reply

Marsh Posté le 12-08-2008 à 12:33:27    

je pense que c'est 0,1,2 vu son code initial. Doit y avoir une typo. Si c'est le cas, strncpy fait très bien l'affaire ;)

Message cité 1 fois
Message édité par Joel F le 12-08-2008 à 12:33:35
Reply

Marsh Posté le 12-08-2008 à 12:44:37    

Joel F a écrit :

je pense que c'est 0,1,2 vu son code initial. Doit y avoir une typo. Si c'est le cas, strncpy fait très bien l'affaire ;)


Ça m'apprendra à ne pas lire les topics en entier  :whistle:

Reply

Marsh Posté le 12-08-2008 à 19:30:05    

Merci pour vos réponses,
mais je n'arrive pas du tout à faire ce que je souhaite.
 
j'aimerais juste mettre la valeur afficher par => printf( "%c", data[0]);
dans une variable.
 
ce que je comprends  dans printf( "%c", data[0]);
c'est que cela affiche la chaine contenu dans data[0]
je peux pas simplement ( même très simplement) la mettre dans une variable?
 
 
PS : je suis obligé de faire du C....  
dans tous les autres langages on fait ça en 2 sec ! ....
 
 
C'est possible ou non?
 
 
 
 

Reply

Marsh Posté le 12-08-2008 à 19:30:05   

Reply

Marsh Posté le 12-08-2008 à 19:31:04    

Merci d'avance,
 

Reply

Marsh Posté le 12-08-2008 à 20:32:41    

pas de réponse???
 
perso je testes encore et encore et j'avoue qu'un coup de main serait vraiement le bienvenu !
 
 
ce test ne fonctionne pas non plus,
 
if (printf( "%c", data[0])=="M" )
  {
      printf(" M victoire ! " ); //je voudrais passé dans cette condition
 }
 else
 {
     printf(" DTC! " );
 }
 
--------------------------------
si une idée vous vient ... je suis preneur !

Reply

Marsh Posté le 12-08-2008 à 20:50:25    

Il faut absolument que tu lises un bouquin de C.
 
printf est une fonction qui ecrit sur la sortie standart : stdout, la valeur de variables qui sont définis dans les arguements 2, 3, 4 ... de la fonction.
data est une chaîne de caractères. en C, celà signifie que  data est un tableau de caractères. Pour que la chaîne soit valide, il faut que l'un des caractères soit 0.  
Chauqe élément de data, data[0], data[1] ... est uncaractère, comme 'c', 'M' ...
Maintenant, analysons ce que tu as écrit, et tu vas voir que ça n'est pas du tout ce que tu crois :
if (printf(%c", data[0]) == "M" )      
printf est une fonction donc renvoie une valeur, la valeur est le nombre de caractères écrits, ici 1.
Donc 1 est comparé à l'adresse mémoire de la chaîne "M", en effet, à la compil, la chaîne "M" a été stockée en mémoire quelque part, donc quelque part il y a un 77 (code ASCII decimal de M) et puis un 0.
Autant-dire que la comparaison échoue !
Ce que tu veux sans doute faire c'est  

Code :
  1. if (data[0] == 'M')
  2. {
  3.     printf("M Victoire !" );
  4. }
  5. else
  6. {
  7.     printf("DTC !" );
  8. }


Citation :

'aimerais juste mettre la valeur afficher par => printf( "%c", data[0]);
dans une variable.
 

C'est très simple :

Code :
  1. char c = data[0];


Message édité par Trap D le 12-08-2008 à 20:53:10
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed