DE C++ EN C

DE C++ EN C - C - Programmation

Marsh Posté le 30-12-2011 à 21:12:32    

Bonjour, aidez moi s'il vous plait :  
 
Comment pourrai je traduire cette ligne de C++ en C :     void extract_word ( string s, string &s1, string &s2 )
 
J'ai du mal avec les "&".Merci d'avance   :wahoo:  
 

Reply

Marsh Posté le 30-12-2011 à 21:12:32   

Reply

Marsh Posté le 30-12-2011 à 21:33:55    

j'ai essayé avec  void extract_word ( char *s, (char *) &s1, (char *) &s2 )   mais négatif....

Reply

Marsh Posté le 30-12-2011 à 23:33:54    

le '&' indique que la variable est une référence, c'est propre au C++.
 
Si t'as besoin de modifier s1 ou s2, fais passer par pointeur en C ;)


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 30-12-2011 à 23:46:11    

Terminapor a écrit :

le '&' indique que la variable est une référence, c'est propre au C++.
 
Si t'as besoin de modifier s1 ou s2, fais passer par pointeur en C ;)


 
 
Merci je  comprends maintenant, vais essayer et voir ce que ca donne

Reply

Marsh Posté le 31-12-2011 à 13:53:02    

qu'est-ce que tu appelles traduire ? C'est dans quel contexte ?
Parce que si c'est pour réutiliser une lib compilée en C++ depuis du C (dll ou shared object), tu vas avoir de très mauvaises surprises ...


---------------
last.fm
Reply

Marsh Posté le 31-12-2011 à 19:51:15    

theshockwave a écrit :

qu'est-ce que tu appelles traduire ? C'est dans quel contexte ?
Parce que si c'est pour réutiliser une lib compilée en C++ depuis du C (dll ou shared object), tu vas avoir de très mauvaises surprises ...


 
 
Oui en fait c'est cette fonction que je veux recoder en C,elle recoit en parametre un char et 2 passages par reference , elle doit extraire le premier mot d'une chaine :
 
 
void s_word_extract_first ( string s, string &s1, string &s2 )
 
{
  int i;
  int mode;
  int s_len;
 
  s_len = s.length ( );
  s1 = "";
  s2 = "";
  mode = 1;
 
  for ( i = 0; i < s_len; i++ )
  {
    if ( mode == 1 )
    {
      if ( s[i] != ' ' )
      {
         mode = 2;
      }
    }
    else if ( mode == 2 )
    {
      if ( s[i] == ' ' )
      {
        mode = 3;
      }
    }
    else if ( mode == 3 )
    {
      if ( s[i] != ' ' )
      {
        mode = 4;
      }
    }
    if ( mode == 2 )
    {
      s1 = s1 + s[i];
    }
    else if ( mode == 4 )
    {
      s2 = s2 + s[i];
    }
  }
 
  return;
}
 
 
Pour apeler la fonction je fais ceci :     s_word_extract_first ( line, word, rest );
 
Ca marche bien en C++,mais comment en C svp ???

Reply

Marsh Posté le 31-12-2011 à 19:54:10    

Aussi, je dois poster le projet ce soir à minuit au plus tard, je compte sur vous pour m'aider .

Reply

Marsh Posté le 01-01-2012 à 13:56:43    

ce code est mauvais en C++, sa traduction directe en C serait aussi mauvaise. Regarde ta bibliothèque standard pour la manipulation de chaines, tu trouveras de bonnes méthodes pour le faire.
 
Lance-toi, fournis-nous un code que tu as écrit toi même, et ca servira de base pour qu'on t'aide.


---------------
last.fm
Reply

Marsh Posté le 01-01-2012 à 18:12:06    

baboye11 a écrit :


 
 
Oui en fait c'est cette fonction que je veux recoder en C,elle recoit en parametre un char et 2 passages par reference , elle doit extraire le premier mot d'une chaine :
 
 
void s_word_extract_first ( string s, string &s1, string &s2 )
 
{
  int i;
  int mode;
  int s_len;
 
  s_len = s.length ( );
  s1 = "";
  s2 = "";
  mode = 1;
 
  for ( i = 0; i < s_len; i++ )
  {
    if ( mode == 1 )
    {
      if ( s[i] != ' ' )
      {
         mode = 2;
      }
    }
    else if ( mode == 2 )
    {
      if ( s[i] == ' ' )
      {
        mode = 3;
      }
    }
    else if ( mode == 3 )
    {
      if ( s[i] != ' ' )
      {
        mode = 4;
      }
    }
    if ( mode == 2 )
    {
      s1 = s1 + s[i];
    }
    else if ( mode == 4 )
    {
      s2 = s2 + s[i];
    }
  }
 
  return;
}
 
 
Pour apeler la fonction je fais ceci :     s_word_extract_first ( line, word, rest );
 
Ca marche bien en C++,mais comment en C svp ???


 
 
Une référence permet de modifier directement un argument, j'm'explique avec un bout de code :  
 

Code :
  1. void fonction_avec_reference(int&a)
  2. {
  3. a=180;
  4. }
  5. void fonction_sans_reference(int a)
  6. {
  7. a=180;
  8. };
  9. int main(int,char**)
  10. {
  11. int var=0;
  12. fonction_sans_reference(var); // Ici, on appelle la fonction sans utiliser de référence, donc var ne sera pas modifié car le passage se fait par copie dans ce cas.
  13. fonction_avec_reference(var); // Maintenant, var aura une valeur de 180, étant donné que le fait d'utiliser une référence nous fait travailler directement sur la variable utilisée, et pas sur une copie
  14. return 0;
  15. }


 
Normalement tu as les connaissances requise pour faire ça en C avec les pointeurs ;)


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 01-01-2012 à 19:26:16    

Terminapor a écrit :


 
 
Une référence permet de modifier directement un argument, j'm'explique avec un bout de code :  
 

Code :
  1. void fonction_avec_reference(int&a)
  2. {
  3. a=180;
  4. }
  5. void fonction_sans_reference(int a)
  6. {
  7. a=180;
  8. };
  9. int main(int,char**)
  10. {
  11. int var=0;
  12. fonction_sans_reference(var); // Ici, on appelle la fonction sans utiliser de référence, donc var ne sera pas modifié car le passage se fait par copie dans ce cas.
  13. fonction_avec_reference(var); // Maintenant, var aura une valeur de 180, étant donné que le fait d'utiliser une référence nous fait travailler directement sur la variable utilisée, et pas sur une copie
  14. return 0;
  15. }


 
Normalement tu as les connaissances requise pour faire ça en C avec les pointeurs ;)


 
 
Merci, c'est très explicite ton explication, j'ai dèjà envoyé le projet mais ceci est une connaissance de plus, j'ai bien saisi les references maintenant, thanks for all !  :D  

Reply

Sujets relatifs:

Leave a Replay

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