processus, pipes, et chaîne en majuscule

processus, pipes, et chaîne en majuscule - C++ - Programmation

Marsh Posté le 22-11-2004 à 14:13:08    

J'ai un petit programme à effectuer. Le processus père envoie au fils une chaîne de caractères, ici "bonjour", le fils la met en majuscule et la renvoie au père qui répond "merci".
 
J'ai réussi à faire communiquer les processus entre eux. Le seul problème qui me reste est que je ne sais pas comment convertir tout en majuscule la chaîne de caractère.
 
Après quelques recherches, j'ai lu qu'il fallait utiliser la fonction toupper() qui convertit simplement un caractère. Il faudrait concaténer chaque lettre du mot dans une autre chaîne de caractère. Cela est-il possible? Si oui, quelqu'un pourrait-il m'indiquer la ligne de code à rajouter en m'expliquant svp? Merci d'avance ;)
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. int main(){
  6. int fils;
  7. int p1[2];
  8. int p2[2];
  9. int p3[2];
  10. int data;
  11. pipe(p1);
  12. pipe(p2);
  13. pipe(p3);
  14. if((fils=fork())==0)
  15. {
  16.  char tampon[10];
  17.  close(p1[1]);
  18.  close(p2[0]);
  19.  close(p3[1]);
  20.  data=read(p1[0],tampon,10);
  21.  printf("le mot est %s\n",tampon);
  22.  data=write(p2[1],tampon,10);
  23.  data=read(p3[0],tampon,10);
  24.  printf("enfin la réponse du pere est : %s\n",tampon);
  25. }
  26. else
  27. {
  28.  char rep[10];
  29.  close(p1[0]);
  30.  close(p2[1]);
  31.  close(p3[0]);
  32.  data=write(p1[1],"bonjour",10);
  33.  data=read(p2[0],rep,10);
  34.  printf("la reponse du fils est : %s\n",rep);
  35.  data=write(p3[1],"merci",10);
  36. }
  37. }

Reply

Marsh Posté le 22-11-2004 à 14:13:08   

Reply

Marsh Posté le 22-11-2004 à 14:16:20    

ben tu fais un strdup et après
 
pour i {0..n-1}:
  chaine[i] = toupper(chaine[i])
 
write(p1[1],"bonjour",10);
manqué

Reply

Marsh Posté le 22-11-2004 à 14:24:53    

Taz a écrit :

ben tu fais un strdup


 
Qu'est-ce que strdup stp?
 

Taz a écrit :

et après
pour i {0..n-1}:
  chaine[i] = toupper(chaine[i])


 
Ca marche impeccable :)
 

Taz a écrit :

write(p1[1],"bonjour",10);
manqué


 
Dsl j'ai pas compris ce que tu voulais entendre ici :D


Message édité par angelseb le 22-11-2004 à 14:30:19
Reply

Marsh Posté le 22-11-2004 à 14:34:13    

Code :
  1. #include <stdlib.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4. char* string_upper(const char *s)
  5. {
  6. char *up;
  7. size_t i, len;
  8. len = strlen(s);
  9. up = malloc(len + 1);
  10. if(!up) return NULL;
  11. for(i = 0; i < len; ++i)
  12. {
  13.  up[i] = toupper(s[i]);
  14. }
  15. up[len] = '\0';
  16. return up;
  17. }
  18. #include <stdio.h>
  19. int main()
  20. {
  21. char *s = string_upper("BonJour !" );
  22. puts(s);
  23. free(s);
  24. }

va falloir un peut te dégourdir et commencer à RTFM

Reply

Marsh Posté le 22-11-2004 à 14:44:17    

Merci mais je n'ai pas besoin de gérer aussi précisément la mémoire.
 
Et ce n'était pas la peine de me dire de me dégourdir... Je suis simplement étudiant et vu le prof que je me tape, ce n'est pas facile de capter. J'essaie de me débrouiller par moi même et grâce à des personnes s'y connaissant telles que toi, je progresse.

Reply

Marsh Posté le 22-11-2004 à 14:47:21    

Angelseb a écrit :

Merci mais je n'ai pas besoin de gérer aussi précisément la mémoire.

bla bla
 
lis la documentation de read/write et tu m'appelles le jour où sizeof "Bonjour" ça fait 10


Message édité par Taz le 22-11-2004 à 14:47:59
Reply

Marsh Posté le 22-11-2004 à 14:50:45    

Je pense qu'il voulait faire un one-liner d'étudiant, genre:
 

Code :
  1. void string_upper(char * s)
  2. {
  3.   while(*s++=toupper(*s)) ;
  4. }

Non ? :D


Message édité par Lam's le 22-11-2004 à 14:51:06
Reply

Marsh Posté le 22-11-2004 à 14:53:43    

Code :
  1. std::string s( "bonjour" );
  2. std::transform( s.begin(), s.end(), s.begin(), toupper );


:whistle:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 22-11-2004 à 14:54:09    

euh ça fait un peut peur niveau évaluation de s

Reply

Marsh Posté le 22-11-2004 à 14:58:16    

Taz a écrit :

euh ça fait un peut peur niveau évaluation de s


 
Ah oui tu en connais bcp toi qui apprenne à programmer en C++ en S? Faut arrêter...

Reply

Marsh Posté le 22-11-2004 à 14:58:16   

Reply

Marsh Posté le 22-11-2004 à 14:58:35    

HelloWorld a écrit :

Code :
  1. std::string s( "bonjour" );
  2. std::transform( s.begin(), s.end(), s.begin(), toupper );


:whistle:

si t'avais vraiment voulu jouer au con, t'aurais utiliser boost::to_upper

Reply

Marsh Posté le 22-11-2004 à 14:59:13    

Angelseb a écrit :

Ah oui tu en connais bcp toi qui apprenne à programmer en C++ en S? Faut arrêter...

fortune

Reply

Marsh Posté le 22-11-2004 à 15:11:18    

boost c'est pas standard :o


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 22-11-2004 à 16:38:28    

Angelseb a écrit :

Ah oui tu en connais bcp toi qui apprenne à programmer en C++ en S? Faut arrêter...


 
PTDR :lol:


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 22-11-2004 à 17:12:34    

Moi j'ai pas compris.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 22-11-2004 à 17:25:48    

HelloWorld a écrit :

Moi j'ai pas compris.


Il croit que Taz lui a dit: "Tu auras une mauvaise note à ta Première S, ou ta terminale S". C'est comme ça que je le comprends, et c'est à mourir de rire.

Reply

Marsh Posté le 22-11-2004 à 17:31:01    

c'est du c, c'est pas dans la bonne cat

Reply

Marsh Posté le 22-11-2004 à 17:42:37    

Lam's a écrit :

Il croit que Taz lui a dit: "Tu auras une mauvaise note à ta Première S, ou ta terminale S". C'est comme ça que je le comprends, et c'est à mourir de rire.


Ah ok... :sweat:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

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