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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

remplacer en C

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

Reprise du message précédent :
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 26-08-2002 à 16:35:25  profilanswer
 

n°202134
lorill
Posté le 26-08-2002 à 16:36:28  profilanswer
 

Sous unix, tout est fichier, y compris l'entrée standard...

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

ok j'ai mis stdin pour le file :) par contre il me prend le retour à la ligne cet imbécile... pas grave je vais le virer à la main... avec la fonction changechar :D

n°202143
lorill
Posté le 26-08-2002 à 16:41:48  profilanswer
 

Bah vu que c'est tout le temps le dernier caractere, y'a plus propre que ce changechar()...

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

yep remplacer \n par \0 et je suis heureux :)
 
Merci beaucoup

n°202513
Musaran
Cerveaulté
Posté le 27-08-2002 à 03:54:27  profilanswer
 

Code :
  1. //Copie la chaîne source dans target, en remplaçant le caractère search par change.
  2. //La même chaîne peut être source et target.
  3. void strcpyreplace(char* target, const char* source, char search, char change){
  4. for( ; ; source++, target++ ){
  5.  if( *source == search)
  6.   *target= change ;
  7.  else
  8.   *target= *source ;
  9.  if(*source == '\0') break ;
  10. }
  11. }
  12. //Change le caractère search par change partout dans str.
  13. void strreplace(char* str, char search, char change){
  14. strcpyreplace(str,str,search,change);
  15. }


Code :
  1. //La même, en plus compact
  2. void strcpyreplace2(char* target, const char* source, char search, char change){
  3. for( ; ; source++, target++ ){
  4.  *target= *source==search?change:*source ;
  5.  if(*source == '\0') break ;
  6. }
  7. }


Code :
  1. //La même, pour les maniaques du compact
  2. void strcpyreplace3(char* target, const char* source, char search, char change){
  3. while(*target++ = *source==search?(source++,change):*source++) ;
  4. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°202522
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 08:05:49  profilanswer
 

musaran a écrit a écrit :

Code :
  1. //Copie la chaîne source dans target, en remplaçant le caractère search par change.
  2. //La même chaîne peut être source et target.
  3. void strcpyreplace(char* target, const char* source, char search, char change){
  4. for( ; ; source++, target++ ){
  5.  if( *source == search)
  6.   *target= change ;
  7.  else
  8.   *target= *source ;
  9.  if(*source == '\0') break ;
  10. }
  11. }
  12. //Change le caractère search par change partout dans str.
  13. void strreplace(char* str, char search, char change){
  14. strcpyreplace(str,str,search,change);
  15. }


Code :
  1. //La même, en plus compact
  2. void strcpyreplace2(char* target, const char* source, char search, char change){
  3. for( ; ; source++, target++ ){
  4.  *target= *source==search?change:*source ;
  5.  if(*source == '\0') break ;
  6. }
  7. }


Code :
  1. //La même, pour les maniaques du compact
  2. void strcpyreplace3(char* target, const char* source, char search, char change){
  3. while(*target++ = *source==search?(source++,change):*source++) ;
  4. }






 
Arréte de frimer! ;)

n°202527
black_lord
Truth speaks from peacefulness
Posté le 27-08-2002 à 08:21:05  profilanswer
 

Bon depuis le temps que je me pose la question : quel niveau d'étude (en prog) vous avez ?

n°202528
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 08:23:26  profilanswer
 

black_lord a écrit a écrit :

Bon depuis le temps que je me pose la question : quel niveau d'étude (en prog) vous avez ?




 
Regarde les profils :D

n°202622
BifaceMcLe​OD
The HighGlandeur
Posté le 27-08-2002 à 10:53:49  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 ==c1?c2:string [i]);
  4. }


 
Edit : inversion dans l'ordre de ?:




Exemple typique des travers du langage C. Le programmeur s'occupe de l'optimisation du code au niveau source avant même de s'occuper d'écrire un code correct...
 
Je vous signale au passage, que, en plus de ne pas être beau, ce code sera bien moins optimisé que le premier bout de code de ce topic. Et ce pour une raison simple : si [i]n est la longueur de la chaîne, ce bout de code-ci fait n affectations et n comparaisons, alors que le premier bout de code fera n comparaisons, mais seulement quelques affectations (autant qu'il y a de caractères à remplacer).
Et j'espère en plus pour vous que le compilateur sera assez intelligent pour remplacer les 2 accès en lecture au tableau de caractères par un seul, dont il placera la valeur dans un registre du processeur (mais aujourd'hui, la majorité des compilateurs optimisants savent faire cela).
 
Moralité : laissez faire leur boulot aux optimiseurs de code des compilateurs. Vous n'imaginez pas le nombre (et l'efficacité) des optimisations qu'ils peuvent apporter à votre code. Et souvenez-vous que moins votre code sera simple et "élégant" ("standard", si vous préférez, ou "sans astuce" ), moins votre compilateur saura l'optimiser.

mood
Publicité
Posté le 27-08-2002 à 10:53:49  profilanswer
 

n°202726
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 11:50:24  profilanswer
 

BifaceMcLeOD a écrit a écrit :

...



 
je pense surtout qu'ils s'amusaient à faire cette fonction en un minimum de lignes  :D  
 
ceci dit, tu as raison  :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
n°202731
LetoII
Le dormeur doit se réveiller
Posté le 27-08-2002 à 11:52:25  profilanswer
 

Harkonnen a écrit a écrit :

 
 
je pense surtout qu'ils s'amusaient à faire cette fonction en un minimum de lignes  :D  
 
ceci dit, tu as raison  :jap:  




 
Heu non, j'ai proposé une solution, les autres sont partis en live :D

n°202744
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 11:56:27  profilanswer
 

letoII a écrit a écrit :

 
 
Heu non, j'ai proposé une solution, les autres sont partis en live :D




c la faute à Musaran ça ! il peut pas s'empécher de sortir sa science à chaque fois :d
j'aimerais bien voir la gueule de ses sources ! [:ddr555]
 
musaran > je déconne hein !! [:calin]


---------------
J'ai un string dans l'array (Paris Hilton)
n°202746
Jar Jar
Intaigriste
Posté le 27-08-2002 à 11:58:39  profilanswer
 

Harkonnen a écrit a écrit :

je pense surtout qu'ils s'amusaient à faire cette fonction en un minimum de lignes  :D


Bah non, sinon ils auraient écrit un truc du genre :
 

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


Message édité par Jar Jar le 27-08-2002 à 12:00:06

---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°202756
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2002 à 12:02:58  profilanswer
 

Jar Jar a écrit a écrit :

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






Je pense que double Jar termine ce topic de façon brillante !
En plus, son code n'est pas dégueulasse (même si l'opérateur ternaire spas génial)
 
:jap:


---------------
J'ai un string dans l'array (Paris Hilton)
n°202807
BifaceMcLe​OD
The HighGlandeur
Posté le 27-08-2002 à 13:44:47  profilanswer
 

C'est effectivement un bon début pour l'Obfuscated C Code Contest...  :D

n°202998
Nono
non, pas le petit robot
Posté le 27-08-2002 à 16:38:48  profilanswer
 

BifaceMcLeOD a écrit a écrit :

C'est effectivement un bon début pour l'Obfuscated C Code Contest...  :D  



:lol:
Heureusement qu ils vont devenir ingénieurs et pas techniciens :o Patapai :o


---------------
"On pourrait construire des asiles de cons, mais vous imaginez la taille des batiments"
n°203021
black_lord
Truth speaks from peacefulness
Posté le 27-08-2002 à 16:51:00  profilanswer
 

nono a écrit a écrit :

:lol:
Heureusement qu ils vont devenir ingénieurs et pas techniciens :o Patapai :o




 
Ce qui veut dire ?

n°203038
Nono
non, pas le petit robot
Posté le 27-08-2002 à 16:58:27  profilanswer
 

black_lord a écrit a écrit :

 
 
Ce qui veut dire ?



Bah en theorie ne aps passer sa vie a pisser du code ;) (m enfin ca va ct po méchant ce que g dit...)


---------------
"On pourrait construire des asiles de cons, mais vous imaginez la taille des batiments"
n°203041
black_lord
Truth speaks from peacefulness
Posté le 27-08-2002 à 17:00:56  profilanswer
 

ok  :D

n°203044
kadreg
profil: Utilisateur
Posté le 27-08-2002 à 17:02:09  profilanswer
 

black_lord a écrit a écrit :

 
 
Ce qui veut dire ?




 
Que c'est pas grave si ils écrivent du code illisible, de toutes façon, ils passent leur journées en réunion, à faire des démos qui plantent, à écrire des specs avec word que personne ne lira, à jouer avec project (merde, j'ai mis ma ressource à 1200%), et à s'envoyer des mails.
 
Le vrai code est écrit par les techniciens.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°203046
black_lord
Truth speaks from peacefulness
Posté le 27-08-2002 à 17:02:55  profilanswer
 

:lol:

n°203124
Nono
non, pas le petit robot
Posté le 27-08-2002 à 17:35:25  profilanswer
 

kadreg a écrit a écrit :

 
 
Que c'est pas grave si ils écrivent du code illisible, de toutes façon, ils passent leur journées en réunion, à faire des démos qui plantent, à écrire des specs avec word que personne ne lira, à jouer avec project (merde, j'ai mis ma ressource à 1200%), et à s'envoyer des mails.
 
Le vrai code est écrit par les techniciens.



c tellement vrai :sweat:
 
:lol:


---------------
"On pourrait construire des asiles de cons, mais vous imaginez la taille des batiments"
n°203540
Musaran
Cerveaulté
Posté le 28-08-2002 à 02:24:53  profilanswer
 

Harkonnen a écrit a écrit :

je pense surtout qu'ils s'amusaient à faire cette fonction en un minimum de lignes  :D


Tout à fait.
C'est pour montrer jusq'où il ne faut pas aller :D .
Les post-opérateurs ++ -- ont mauvaise réputation pour l'optimisation du compilateur.
 
Et ?: est conditionnel, tout comme if else.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°204346
Musaran
Cerveaulté
Posté le 29-08-2002 à 02:55:06  profilanswer
 

kadreg a écrit :

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

Code :
  1. ...i++... = ...i...




Il me semble que l'ordre d'évaluation n'est pas défini, et que donc la valeur du i de droite peut dépendre du i++ de gauche.
 

El_Gringo a écrit :

Quand à celui là [?:], il me parait un peu obsolète


Pas du tout.
Il sert pour choisir conditionnellement une valeur dans une expression, ce que ne permet pas le if-else.

Code :
  1. var= test ? a : b ;
  2. if(test)
  3. var= a;
  4. else
  5. var= b;

Le version if-else a comme inconvénients:
-Plus long.
-4x plus de lignes: encombrement du source.
-Duplication d'expression: on peut se tromper d'un côté et pas de l'autre, très dur à déboguer.
 

letoII a écrit :

Arréte de frimer!


Je frime pas, je m'amuses !
 

black_lord a écrit :

Bon depuis le temps que je me pose la question : quel niveau d'étude (en prog) vous avez ?


-du basic il y a longtemps.
-formation intensive d'un an.
-je m'y suis remis il n'y a pas longtemps.
 

Harkonnen a écrit :

c la faute à Musaran ça ! il peut pas s'empécher de sortir sa science à chaque fois    
j'aimerais bien voir la gueule de ses sources !    
 
musaran > je déconne hein !!


Mais heuh... Je réponds aux questions. Plus ou moins...
 
Mes sources, tu les a vus: les bouts de code que je poste.
Je n'ai pas encore de projet entier abouti.
 

Jar Jar a écrit :

Bah non, sinon ils auraient écrit un truc du genre :

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




J'ai voulu être plus générique avec source et target.


Message édité par Musaran le 29-08-2002 à 02:56:44

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

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