Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1383 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  remplacer en C

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

remplacer en C

n°202039
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 15:49:39  profilanswer
 

Je n'arrive pas à trouver de fonction permettant de remplacer un caractère par un autre en C. J'ai parcouru le string.h et relu des bouquins. Rien. Recherche sur le forum : rien...
 
La fonction existe-t-elle ou est ce que je dois la réécrire ?
 
merci.

mood
Publicité
Posté le 26-08-2002 à 15:49:39  profilanswer
 

n°202041
El_gringo
Posté le 26-08-2002 à 15:52:00  profilanswer
 

dans la librairie de base, j'pense pas qu'elle existe, réécris là. C pas bien compliqué !

n°202042
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 15:52:09  profilanswer
 

Je pense pas, mais ça se fait vite:
 

Code :
  1. void changechar(char *string,char c1,char c2)
  2. {
  3.    char *c;
  4.    while( (c = strchr(string,c1))
  5.     {
  6.        *c = c2;
  7.     }
  8. }


Message édité par LetoII le 26-08-2002 à 15:52:16
n°202053
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 15:58:15  profilanswer
 

Ok merci :)
 
Je suis pas super bon en dev et je pige pas tout :(
Le remplacement se fait où ? à [cpp]*c=c2[fixed] ??
 
je suis trop mauvais.. je m'en vais.

n°202055
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 15:59:29  profilanswer
 

black_lord a écrit a écrit :

Ok merci :)
 
Je suis pas super bon en dev et je pige pas tout :(
Le remplacement se fait où ? à [cpp]*c=c2[fixed] ??
 
je suis trop mauvais.. je m'en vais.




 
c bien ça

n°202057
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 26-08-2002 à 16:01:23  profilanswer
 

letoII a écrit a écrit :

 
 
c bien ça




tu lui confirmes donc qu'il est mauvais ? [:ddr555]


---------------
J'ai un string dans l'array (Paris Hilton)
n°202065
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 16:03:37  profilanswer
 

il n'y a rien d'explicite pour dire que c2 remplace c1 ?
 
C'est parce que *c est un pointeur ?
 
Si c'est ça je me coucherai moins bête :)
 
Merci à vous :)

n°202073
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:06:32  profilanswer
 

Harkonnen a écrit a écrit :

 
tu lui confirmes donc qu'il est mauvais ? [:ddr555]
 




 
 
 :lol:

n°202077
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:07:18  profilanswer
 

black_lord a écrit a écrit :

il n'y a rien d'explicite pour dire que c2 remplace c1 ?
 
C'est parce que *c est un pointeur ?
 
Si c'est ça je me coucherai moins bête :)
 
Merci à vous :)




 
En fait ça marche pas :D

n°202079
El_gringo
Posté le 26-08-2002 à 16:08:44  profilanswer
 

black_lord a écrit a écrit :

il n'y a rien d'explicite pour dire que c2 remplace c1 ?
 
C'est parce que *c est un pointeur ?
 
Si c'est ça je me coucherai moins bête :)
 
Merci à vous :)




 
Bah, si, le = c'est l'affectation en C, tu sais ça qd même !?
comme pour un entier.
*c n'est pas un pointeur, *c c'est le carractère. c est un pointeur vers *c

mood
Publicité
Posté le 26-08-2002 à 16:08:44  profilanswer
 

n°202081
El_gringo
Posté le 26-08-2002 à 16:09:10  profilanswer
 

letoII a écrit a écrit :

 
 
En fait ça marche pas :D
 




 
comment ça ça marche pas !??

n°202083
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:09:19  profilanswer
 

Code :
  1. void changechar(char *string,char c1,char c2)
  2. {
  3.    char *c;
  4.    while( (c = strchr(string,c1))
  5.     {
  6.        *c = c2;
  7.        string = c + 1;
  8.     }
  9. }


 
C mieu là :D
 
En fait je recherche chaque occurence de c1 dans string (strchr)et je les remplace par c2 (*c = c2).
 
c est un pointeur vers le caractère trouvé par strchr.

n°202085
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:10:16  profilanswer
 

El_Gringo a écrit a écrit :

 
 
comment ça ça marche pas !??




 
En fait si, mais c optimisable.  :ange:  
Ouai bon ok je suis un peu dans le paté aujourd'hui.

n°202088
El_gringo
Posté le 26-08-2002 à 16:12:59  profilanswer
 

letoII a écrit a écrit :

 
 
En fait si, mais c optimisable.  :ange:  
Ouai bon ok je suis un peu dans le paté aujourd'hui.




 
Moi j'préférais ta 1ère version.
+ claire. + rapide aussi (1 affectation et une addition en + ds la 2e) ! En quoi tu la trouve + optimisée ta 2e version ?

n°202089
kadreg
profil: Utilisateur
Posté le 26-08-2002 à 16:13:16  profilanswer
 

J'ai pas de compilo sous la main, ça marche ça ?:  
 

Code :
  1. void changechar(char *string,char c1,char c2) {
  2.     int i = 0;
  3.     while (string [i++] = string [i]==c1?c2:string [i]);
  4. }


 
Edit : inversion dans l'ordre de ?:


Message édité par kadreg le 26-08-2002 à 16:16:03

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°202092
El_gringo
Posté le 26-08-2002 à 16:15:17  profilanswer
 

kadreg a écrit a écrit :

J'ai pas de compilo sous la main, ça marche ça ?:  
 

Code :
  1. void changechar(char *string,char c1,char c2) {
  2.     int i = 0;
  3.     while (string [i++] = string [i]==c1?string [i]:c2);
  4. }






 
Je sais pas. c pas beau en tt cas !

n°202093
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:15:57  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Moi j'préférais ta 1ère version.
+ claire. + rapide aussi (1 affectation et une addition en + ds la 2e) ! En quoi tu la trouve + optimisée ta 2e version ?




 
Ben ça évite de se retaper tout le début de la chaine à chaque fois, tu repart du caractère que tu vient de changer en gros. Si la chaine est longue tu y gagne à mon avis (surtout si t'as que quelque caractères à changer dedans).

n°202094
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:16:22  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Je sais pas. c pas beau en tt cas !




 
+1 c archi moche

n°202095
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 16:16:26  profilanswer
 

je comprends pas le

Code :
  1. string = c + 1


 
pour remplacer les espaces par des underscores je fais donc

Code :
  1. changechar(machaine,' ','_');

?

n°202096
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 26-08-2002 à 16:17:14  profilanswer
 

kadreg a écrit a écrit :

J'ai pas de compilo sous la main, ça marche ça ?:  
 

Code :
  1. void changechar(char *string,char c1,char c2) {
  2.     int i = 0;
  3.     while (string [i++] = string [i]==c1?c2:string [i]);
  4. }


 
Edit : inversion dans l'ordre de ?:




 :eek2:  
t'es un malade toi !!!  :heink:


---------------
J'ai un string dans l'array (Paris Hilton)
n°202098
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 16:17:45  profilanswer
 

ok c'est pour avancer le string = c + 1

n°202099
lorill
Posté le 26-08-2002 à 16:17:55  profilanswer
 

El_Gringo a écrit a écrit :

 
Je sais pas. c pas beau en tt cas !




 
T'aimes pas les opérateurs ternaires, ou c'est les boucles dans lesquelles la condition d'arret est "implicite" ?

n°202100
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:17:56  profilanswer
 

black_lord a écrit a écrit :

pour remplacer les espaces par des underscores je fais donc

Code :
  1. changechar(machaine,' ','_');

?




 
voilà
 

black_lord a écrit a écrit :

je comprends pas le

Code :
  1. string = c + 1






 
 
C simple je me place sur le caractère qui suit celui que j'ai remplacé, ça m'évite de reparcourir toute la chaîne depuis le début pour trouver le suivant.


Message édité par LetoII le 26-08-2002 à 16:18:36
n°202102
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 16:19:13  profilanswer
 

Merci beaucoup :)

n°202103
kadreg
profil: Utilisateur
Posté le 26-08-2002 à 16:19:13  profilanswer
 

lorill a écrit a écrit :

 
T'aimes pas les opérateurs ternaires, ou c'est les boucles dans lesquelles la condition d'arret est "implicite" ?




 
Moi non, c'est deux choses que je m'interdit d'utiliser tellement ça rend le code pénible à lire.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°202104
El_gringo
Posté le 26-08-2002 à 16:19:29  profilanswer
 

letoII a écrit a écrit :

 
 
Ben ça évite de se retaper tout le début de la chaine à chaque fois, tu repart du caractère que tu vient de changer en gros. Si la chaine est longue tu y gagne à mon avis (surtout si t'as que quelque caractères à changer dedans).




 
Ha ouais, j'y avait pas pensé tient...

n°202107
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:20:54  profilanswer
 

kadreg a écrit a écrit :

J'ai pas de compilo sous la main, ça marche ça ?:  
 

Code :
  1. void changechar(char *string,char c1,char c2) {
  2.     int i = 0;
  3.     while (string [i++] = (string [i]==c1?c2:string [i]));
  4. }


 
Edit : inversion dans l'ordre de ?:




 
Me semble plus correcte, et puis c assez moche quand même

n°202108
El_gringo
Posté le 26-08-2002 à 16:21:04  profilanswer
 

kadreg a écrit a écrit :

 
 
Moi non, c'est deux choses que je m'interdit d'utiliser tellement ça rend le code pénible à lire.




 
Mais !??? tu dis ça ? après ce que tu viens de ns poster !?
J'comprend lpus là !!

n°202109
El_gringo
Posté le 26-08-2002 à 16:23:39  profilanswer
 

lorill a écrit a écrit :

 
 
T'aimes pas les opérateurs ternaires, ou c'est les boucles dans lesquelles la condition d'arret est "implicite" ?




 
les opérateurs ternaire g rien contre, c obligé desfois (y a pas QUE "?:" comme opérateur ternaire.
Quand à celui là, il me parait un peu obsolète. il date du temps ou on cherchait avant tout à faire du code compacte.
Moi j'aime bien quand, dans un code, chaque ligne correspon à une opération simple...

n°202110
lorill
Posté le 26-08-2002 à 16:24:06  profilanswer
 

kadreg a écrit a écrit :

 
Moi non, c'est deux choses que je m'interdit d'utiliser tellement ça rend le code pénible à lire.




 
Pour les boucles je suis d'accord, par contre l'opérateur ternaire c'est bien(tm) quand c'est utilisé avec parcimonie...
 
Exemple :

Code :
  1. nom = (patronyme == null) ? marital : patronyme;

n°202111
kadreg
profil: Utilisateur
Posté le 26-08-2002 à 16:24:41  profilanswer
 

El_Gringo a écrit a écrit :

 
y a pas QUE "?:" comme opérateur ternaire.




 
Il y a quoi d'autre ? Il m'a toujours semblé que c'était le seul.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°202112
lorill
Posté le 26-08-2002 à 16:25:16  profilanswer
 

El_Gringo a écrit a écrit :

 
y a pas QUE "?:" comme opérateur ternaire.




 
C'est lesquels les autres ?
Note: ceci n'est pas un sarcasme, je cherche réellement a me renseigner
 
Edit: grillé


Message édité par lorill le 26-08-2002 à 16:25:38
n°202113
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 16:26:14  profilanswer
 

Arghh c'ets bizarre mais remplacer la chaine ne résoud pas le problème..
 
Je fais un :

Code :
  1. scanf("%s", &struct1.nom);
  2. changechar(struct1.nom,' ','_');


 
mais ca ne va pas... il prend l'espace et saute le scanf() suivant. Je comprends pas : je pensais que ça venait de l'espace.


Message édité par black_lord le 26-08-2002 à 16:26:33
n°202114
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:27:02  profilanswer
 

:??:


Message édité par LetoII le 26-08-2002 à 16:27:13
n°202118
kadreg
profil: Utilisateur
Posté le 26-08-2002 à 16:29:23  profilanswer
 

Rhhooooo, c'est le scanf qui fait pas ce que tu attends. "%s" va prendre la chaine jusqu'au premier espace. Tu tape "toto tata", dans ta chaine tu auras "toto".
 
 
Regarde plutot du coté de getline.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°202122
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:30:51  profilanswer
 

ou fgets

n°202123
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 16:30:59  profilanswer
 

tu veux voir le code plus en entier ?

Code :
  1. printf("Sous reseau : " );
  2. scanf("%s", &entree.ssreseau);
  3. changechar(entree.reseau,' ','_');
  4.        
  5. printf("Adresse IP : " );
  6. scanf("%s", &entree.ip);
  7. changechar(entree.reseau,' ','_');
  8.        
  9. printf("Adresse MAC : " );
  10. scanf("%s", &entree.mac);
  11. changechar(entree.reseau,' ','_');


 
Si je mets un espace dans la chaine pour le sous reseau alors il affiche Adresse IP mais sans rien me demander il demande Adresse MAC. Après verif entree.ip contient la partie après l'espace.

n°202124
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 16:31:36  profilanswer
 

D'accord
 
scanf() c'est ce qu'on m'avait appris en cours...

n°202130
LetoII
Le dormeur doit se réveiller
Posté le 26-08-2002 à 16:32:55  profilanswer
 

black_lord a écrit a écrit :

D'accord
 
scanf() c'est ce qu'on m'avait appris en cours...




 
Normal, on se fait tous avoir au moin une fois :D

n°202133
black_lord
Truth speaks from peacefulness
Posté le 26-08-2002 à 16:35:25  profilanswer
 

fgets & getline c'est pour les fichiers non ? Le man me dit ça en tout cas

Code :
  1. getline(char **lineptr, size_t *n, FILE *stream);


Moi j'ai une entrée clavier...

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  remplacer en C

 

Sujets relatifs
[VC++] Remplacer un nom de variable dans plusieurs fichiers...[Java] Performance, remplacer des tokens
[JS] Remplacer un mot dans une string[PHP + MySql] un chercher/remplacer sur toute une base???
Remplacer des majuscules par des minusculesRemplacer une puce par une autre lors du survol d'un lien
est il possible de remplacer un fichier .htpasswd par une table MySQL[Java] remplacer 1 séquence de caractère par 1 autre dans un String
[ASP] Comment remplacer des " par des ' dans une chaine de caracterescomment remplacer un bouton "submit" par une image ?
Plus de sujets relatifs à : remplacer en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR